Reputation: 426
I have a python selenium code that upload a local video and click the button, the button can be clicked when video successfully uploaded so I try with EC.element_to_be_clickable
and EC.visibility_of_element_located
and when the button is clickable print a simple message, but always I got the message before video upload complete.
this is my code :
file_uploader = driver.find_element_by_xpath('xpath_input')
file_uploader.send_keys(myvideo_file)
while True:
try:
WebDriverWait(driver, 1000).until(EC.element_to_be_clickable((By.XPATH, 'button_xpath')))
WebDriverWait(driver, 1000).until(EC.visibility_of_element_located((By.XPATH, 'button_xpath')))
break
except:
pass
print("Button ready to be clicked!")
Upvotes: 0
Views: 148
Reputation: 386
What about using get_attribute
of button.
If button is not clickable like <button type="button" class="btn-post primary disabled">Post</button>
, then waiting until disabled disapeared in class name like <button type="button" class="btn-post primary">Post</button>
file_uploader = driver.find_element_by_xpath('xpath_input')
file_uploader.send_keys(myvideo_file)
while True:
# I insert finding element inside while loop because some sites delete existing elements and create new ones.
# In this case, even if the deleted element and new one's xpath are the same, StaleElementException occurs.
class_name = driver.find_element_by_xpath('xpath_input').get_attribute('class')
if 'disabled' not in class_name:
break
time.sleep(1)
Upvotes: 1