我有一个Selenium脚本(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")
您可以使用等待。查看Selenium waits中的更多信息。
在下面的示例中,我们使用所定位的元素的函数visibility\u等待10秒,以使元素可见。
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()
点击回复按钮后,使用。visibility_of_element_located
如下:
browser.find_element_by_css_selector(".reply-button").click()
# Wait for initialize, in seconds
wait = WebDriverWait(browser, 10)
email = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.anonemail'))).get_attribute("value")
print(email)
以下内容:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
等待文档
根据最佳做法:
>
如果你的usecase是验证任何元素的存在,你需要诱导WebDriver等待设置expected_conditions为presence_of_element_located()
,这是检查元素是否存在于页面的DOM上的期望。这并不一定意味着元素是可见的。因此,有效的代码行将是:
WebDriverWait(browser, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".reply-button"))).click()
如果你的usecase是提取任何元素的任何属性,你需要诱导WebDriver等待将expected_conditions设置为visibility_of_element_located(locator)
,这是检查元素是否存在于页面的DOM上并且可见的期望。可见性意味着元素不仅显示,而且具有大于0的高度和宽度。因此,在您的实际使用中,代码行将是:
email = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "element_css"))).get_attribute("value")
如果您的用例是在任何元素上调用click()
,您需要引导WebDriverWait将预期的条件设置为element\u to\u be\u clickable()
,这是检查元素是否可见并启用以便您可以单击它的预期条件。因此,在您的用例中,代码行将是:
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".reply-button"))).click()
您可以在以下内容中找到一些详细的讨论:
我有一个动态加载的页面,其中包含一个按钮。我正在尝试等待selenium使用C#绑定点击按钮。我有以下代码: 不过这不管用。click事件永远不会被触发。selenium脚本不会抛出异常警告ID为“addInspectionButton”的元素不存在。它只是不能点击它。如果我加一根线。Sleep(3000)在wait语句和我获得按钮元素句柄的那一行之间。 我没有使用预期条件.元素在这里正确点击吗?
同时点击一个特定的按钮-我的测试站点将打开模式窗口。 我找不到更好的方法等到任何一个都可见的时候。 你能提出一个解决这种情况的方法吗?
所以我们有一页医学专科。它原本只是英文的。因此,如果您搜索“neuro”,则HTML看起来类似于 然后他们添加了西班牙语,所以并不是所有的结果都会返回,但是只有西班牙语是可见的。一个新的 > 添加在底部。 是否有方法等待任何匹配xpath的元素可见?注意,visibilityOfAllElements()将不起作用,因为它们不会全部可见。 我想可以做的是,预先计算所有带有@id和“width”的元
问题内容: 我在Python 2.7中使用selenium,并且有以下代码,但是我正在寻找一种更有效的方法: 问题答案: 您无需使用一段时间。它已经等待您在WebDriverWait()函数中显示的时间。
问题内容: 我有一个用于量角器测试的登录功能,它看起来像这样: 我不能使用任何量角器专用的钩子,因为此页面上未使用Angular,因此我必须使用基础的webdriver API。问题是,我似乎无法弄清楚如何使用此包装的webdriver对象等到元素可见。任何帮助,将不胜感激。 问题答案: 尝试使用底层驱动程序的预期条件:
问题内容: 我想知道是否可以告诉puppeteer等到显示的元素。 我有什么办法可以做到这一点? 问题答案: 我认为您可以为此使用功能。 要检查可用选项,请参阅github链接。