当前位置: 首页 > 面试题库 >

我如何使用Selenium的等待?

吴城
2023-03-14
问题内容

我在弄清楚如何使用Selenium的wait函数时遇到了麻烦。我正在尝试做的是检查元素是否存在以及是否存在,然后将打印一条语句。这是我的代码:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

browser = webdriver.Firefox()
browser.get("http://google.com")
delay = 3 # seconds
try:
    WebDriverWait(browser, delay).until(EC.presence_of_element_located(browser.find_element_by_xpath('//*[@id="hplogo"]')))
    print ("Page is ready!")
except TimeoutException:
    print ("Loading took too much time!")

当前代码给我以下错误:

Traceback (most recent call last):
  File "/Users/John/Documents/waitTest.py", line 10, in <module>
    WebDriverWait(browser, delay).until(EC.presence_of_element_located(browser.find_element_by_xpath('//*[@id="hplogo"]')))
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/support/wait.py", line 71, in until
    value = method(self._driver)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/support/expected_conditions.py", line 59, in __call__
    return _find_element(driver, self.locator)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/support/expected_conditions.py", line 274, in _find_element
    return driver.find_element(*by)
TypeError: find_element() argument after * must be a sequence, not WebElement

问题答案:

预期条件期望将元组传递进来,其中第一项是定位器的类型(By常量),第二项是定位器的值:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(browser, 10)
wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="hplogo"]')))

请注意,您的情况By.ID会更简单:

wait.until(EC.presence_of_element_located((By.ID, 'hplogo')))


 类似资料:
  • 我想等待页面完全加载。我知道我可以通过等待页面元素加载来做到这一点。 但是我想要更通用的东西,我假设可以使用Favicon来确定页面是否已完全加载。 如何使用Selenium Webdriver确定FavIcon是否已加载到页面中? “我知道这只是你的HTML源代码中的另一个元素。但是如果你查看任何网页上的页面加载,Favicon将是最后一个被加载的。如果有一种方法可以等到Favicon加载到网页

  • 问题内容: 我想在colab.research.google.com中使用Chrome的Selenium Webdriver进行快速处理。我可以使用安装Selenium,但chrome的webdriver需要通向webdriverChrome.exe的路径。我应该如何使用它? PS- colab.research.google.com是一个在线平台,可为与深度学习相关的快速计算问题提供GPU。请避

  • 等待元素出现在网页上的最佳方式是什么?我已经读到,我们可以使用隐式等待和功能,如网络驱动程序wait,流利的等待等,最后但不是最不重要的线程.sleep()...我使用最多,但想停止使用。 我的场景: 用户登录到网站…网站检查凭据,并以叠加的形式向用户提供报价(一种弹出窗口,但不是单独的窗口)。我需要验证叠加图上的文字。用户登录和显示覆盖之间存在时间间隔。最好的方法是什么,以便硒只等待元素不可见的

  • 问题内容: 有没有办法使用PageFactory批注来等待Selenium中不存在的元素? 使用时: 找到元素,然后: 我会得到: 我可以使用以下方法执行我需要做的事情: 但是,我希望能够使用PageFactory批注以使框架保持一致。有没有办法做到这一点? 问题答案: 期望定位器,但是您正在发送网络元素,这就是为什么它会引发错误。您可以通过使用以下方法检查webelement列表来执行操作: 更

  • 有没有办法我可以使用那些注释掉的四行在我的vba代码,这样我可以摆脱障碍,而进入一些通知倾向的网页。我找不到任何想法,使我将能够利用他们,因为它是投掷错误,因为他们现在的情况。在这儿。提前道谢。

  • 我正在尝试在使用VueJs的单页应用程序中开发一个自动化测试,当我单击注册按钮时,页面加载了一个包含元素的表单,但是由于元素根据需要加载,它们不会自动出现在那里,我可以解决在单击注册按钮后放置driver.sleep的问题,但我正在寻找一种解决方法,我尝试了InluductEts和elisEnabled,但我无法得到结果,在这里检查我的代码: const { Builder, By, Key, 直