首页 > 解决方案 > 尝试运行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 和以下行,程序将按照我的需要循环,但我无法弄清楚如何让它循环,直到应用按钮可见。(一旦我的工作发布了轮班,它就会变得可见)

标签: pythonloopsseleniumwhile-loop

解决方案


尝试这个:

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()

在上面的代码中,我创建了一个单独的方法,用于在“尝试”中单击该元素,我编写了用于单击该元素的代码,如果元素不可见,则在除部分之外再次调用相同的方法,直到元素可见。


推荐阅读