python - 尝试运行while循环直到元素可见然后单击该元素
问题描述
一旦元素可见,我需要让这个while循环继续,然后单击该元素。
尝试使用预期条件,但我是菜鸟,所以我可能做错了什么。
# wait until apply clickable
apply = wait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "body > associate > div > adjust-schedule > div > list-adjustments > div > basecard > div:nth-child(3) > div > fieldset > div > table.table.table-striped > tbody > tr:nth-child(1) > td:nth-child(6) > button")))
while True:
try:
apply = driver.find_element_by_css_selector("body > associate > div > adjust-schedule > div > list-adjustments > div > basecard > div:nth-child(3) > div > fieldset > div > table.table.table-striped > tbody > tr:nth-child(1) > td:nth-child(6) > button")
apply.click()
except:
ignored_exceptions = (NoSuchElementException, StaleElementReferenceException,)
clckfilter = wait(driver, 10, ignored_exceptions=NoSuchElementException)\
.until(EC.presence_of_element_located((By.XPATH, "/html/body/associate/div/adjust-schedule/div/list-adjustments/div/basecard/div[2]/div/fieldset/div/table[1]/thead/tr/th[4]/button")))
clckfilter.click()
apply.click()
driver.find_element_by_css_selector("body > associate > div > adjust-schedule > div > list-adjustments > div > basecard > div:nth-child(3) > div > fieldset > div > table.table.table-striped > tbody > tr:nth-child(1) > td:nth-child(6) > div > button.btn.btn-primary").click()
# if: EC.presence_of_element_located(By.CSS_SELECTOR, "body > associate > div > adjust-schedule > div > list-adjustments > div > basecard > div:nth-child(3) > div > fieldset > div > table.table.table-striped > tbody > tr:nth-child(1) > td:nth-child(6) > button"): continue
如果我删除 apply.click 和以下行,程序将按照我的需要循环,但我无法弄清楚如何让它循环,直到应用按钮可见。(一旦我的工作发布了轮班,它就会变得可见)
解决方案
尝试这个:
def click():
try:
wait = WebDriverWait(self.browser, 15)
wait.until(EC.visibility_of_element_located(“selector”))
driver.find_element_by_css_selector(“selector”).click()
except:
Click()
在上面的代码中,我创建了一个单独的方法,用于在“尝试”中单击该元素,我编写了用于单击该元素的代码,如果元素不可见,则在除部分之外再次调用相同的方法,直到元素可见。
推荐阅读
- c# - 使用 IP 地址而不是机器的主机名时找不到网络路径
- vue.js - Vuetify 样式标签未出现在我的网页中
- msbuild - 如何将 TeamCity 重新指向不同的 MsBuild
- excel - 根据工作表列表重命名具有各种扩展名的文件夹中的文件
- ios - Animate AVPlayerLayer 变换属性
- dart - 使用 Futures 时 .then() 和 .whenCompleted() 方法之间的区别?
- mysql - 总结 leave_time 到 end_date of order(尽管 end_date of leave 大于 order_status 的 end_date) - mysql
- c# - 将数据绑定到 Xamarin 表单中的 Scrollview Stacklayout
- docker - 在 docker 容器中执行脚本没有错误,但也不起作用
- c# - 是否有与 C#.NET DateTime.Now.ToString("yyyyMMddHHmmssfff") 等效的 PHP7?