当前位置: 首页 > 知识库问答 >
问题:

硒-等待直到元素存在,可见和可交互

薛承基
2023-03-14

我有一个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")

共有3个答案

梁祯
2023-03-14

您可以使用等待。查看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()
方恺
2023-03-14

点击回复按钮后,使用。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

等待文档

周和歌
2023-03-14

根据最佳做法:

>

  • 如果你的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()
    

    您可以在以下内容中找到一些详细的讨论:

    • WebDriver等待未按预期工作
    • 硒:检查元素的存在

  •  类似资料:
    • 我有一个动态加载的页面,其中包含一个按钮。我正在尝试等待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链接。