我有一个硒脚本(python),单击一个答复按钮以使该类显示anonemail。班级anonemail出现所需的时间各不相同。因此,我必须使用sleep直到元素出现。我想等到班级出现,而不要使用睡眠。我听说过等待命令,但是我不知道如何使用它们。
这是我到目前为止的内容:
browser.find_element_by_css_selector(".reply-button").click()
sleep(5)
email=browser.find_element_by_css_selector(".anonemail").get_attribute("value")
根据最佳做法:
如果您的用例用于验证任何元素的presence,则需要诱导WebDriverWait,将expected_conditions设置为presence_of_element_located()
,这是检查元素是否存在于DOM上的期望页面。这并不一定意味着该元素是可见的。因此,有效的代码行将是:
presence_of_element_located()
如果您的用例是要提取任何属性任何元素,则需要诱导WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".reply-button"))).click()
,将WebDriverWait设置为expected_conditions,这是检查元素是否存在于DOM上的期望页面并可见。可见性意味着不仅显示元素,而且其高度和宽度都大于0。因此,在您的用例中,有效的代码行是:
visibility_of_element_located(locator)
如果您的用例是在任何元素上调用visibility_of_element_located(locator)
,则需要促使email = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "element_css"))).get_attribute("value")
将click()
设置为WebDriverWait,这是检查和查看元素的期望,例如您可以单击它。因此,在您的用例中,有效的代码行将是:
expected_conditions
您可以在以下位置找到几个详细的讨论:
element_to_be_clickable()
element_to_be_clickable()
您可以使用等待。检查有关此链接的更多信息:WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".reply-button"))).click()
在下面的示例中,使用功能visible_of_element_located,我们等待元素显示10秒钟。
WebDriverWait not working as expected
您可以使用Selenium: Check for the presence of element
selenium watis
它等待直到元素被加载。
在您的情况下,可以实现,
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
单击implicitly_wait按钮后,像下面一样使用from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(15)
driver.get("http://url")
driver.find_element_by_id("id_of_element").click()
:
browser.implicitly_wait(10)
browser.find_element_by_css_selector(".reply-button").click()
email=browser.find_element_by_css_selector(".anonemail").get_attribute("value")
正在导入:
reply
.visibility_of_element_located