我是初学者。我了解Wait的基本功能,但我对互联网上不同的教程如何放置和解释它感到困惑。例如,在下面的代码中,它是在加载URL之前放置的。那么,是只等待加载URL,还是等待查找元素,或者两者都是?如果我在try块中使用隐式等待一次,它将适用于我在代码中执行的每个元素搜索,这是真的吗?
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")
隐式等待适用于所有的Web元素,其中显式等待仅适用于指定的元素。
显式等待更智能,并且在处理Ajax时真正得到充分利用。另一方面,隐式等待通常用于处理应用程序同步问题。
是,implicit_wait
在全球范围内适用。因此,一旦设置,它将应用于所有元素。
我不建议使用implicit\u wait
,除非您的应用程序太慢。您可以使用显式等待
或任何其他基于您下页要求的等待。
它是一个JAVADOC,但python的实现也应该相同。
https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html#implicitlyWait-long-java.util.concurrent.TimeUnit-
根据Java文档,ImplicitWait用于指定WebDriver实例的时间量,即如果某个元素未立即出现在HTML DOM中,则该驱动程序在搜索该元素时应等待的时间量,单位为纳秒、微秒、毫秒、秒、分,尝试查找一个或多个元素(如果这些元素无法立即使用)时的小时或天数。默认设置为0,这意味着驱动程序
在查找一个或多个元素的指令时,将立即开始搜索并提供结果。
在这种情况下,在重新加载网页后,一个或多个元素可能/可能无法在立即搜索中找到。因此,您的自动化框架可能面临以下任何例外情况:
NoTouchElementException
因此,我们引入隐式等待。通过诱导ImplicitWait,驱动程序将轮询DOM树,直到在抛出NoTouchElementException之前查找元素的配置时间内找到该元素。到那时,您一直在寻找的一个或多个元素可能在HTMLDOM中可用。正如在您的代码中已经将ImplicitWait设置为10秒的值一样,驱动程序将轮询HTMLDOM 10秒。
>
Python:
driver.implicitly_wait(10)
Java:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
网络:
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
最后,一旦您设置了ImplicitWait,WebDriver实例(即驱动程序)就能够携带此配置直到其生命周期。但是,如果需要更改WebDriver实例的大致时间,即驱动程序等待,则可以按如下方式重新配置:
>
Python:
driver.implicitly_wait(5)
Java:
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
网络:
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
如果您想在任何时候取消隐式等待
,您可以按如下方式重新配置它:
>
Python:
driver.implicitly_wait(0)
Java:
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
网络:
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
WebDriver
实例等待查找元素的大致时间
findElement()
或findElement()
时适用
驱动程序级别的隐式和显式等待之间有什么区别。哪一个是驱动级等待。如果我们在代码中提供隐式和显式等待。哪一个优先。
问题内容: 我正在学习Java Maven Selenium。我希望在Selenium中使用。 打开网站(例如https://www.facebook.com) 单击登录的电子邮件字段 等待20秒 输入我的电子邮件 这是我的简单代码: 该代码不起作用。它只会打开Facebook,单击电子邮件字段并输入我的电子邮件ID,而不是等待10秒钟才输入我的电子邮件。 问题答案: 并且无法正常工作,他们将在指
问题内容: 我是初学者。我了解基本等待的内容,但是我对互联网上的不同教程如何放置并进行解释感到困惑。例如,在下面的代码中,将其放置在加载URL之前。因此,是否只是等待URL加载或查找元素或两者兼而有之?的确,如果我在try块中使用一次隐式等待,它是否适用于我在代码中执行的每个元素搜索? 问题答案: 隐式等待 ImplicitWait按照该Java文档是指定的时间量 webdriver的 情况下,即
问题内容: 我在用: 但是对于以下元素它仍然连续失败 我添加了等待代码: 隐式等待是否应该等到找到一个元素后再进行处理?如果我使用而不是我添加的代码,还会更好吗? 问题答案: TL; DR:始终使用显式等待。忘记隐式等待的存在。 以下是显式等待与隐式等待之间的区别的简要概述: 显式等待: 记录和定义的行为。 在硒的本地部分运行(以你的代码语言显示)。 可以在你能想到的任何条件下工作。 返回成功或超
创建驱动程序时,我已将隐式等待设置为10秒。当我希望使用显式等待时,是否必须将隐式等待设置为0? 以下是一个示例: 我必须做webDriver.manage()。超时()。秒);还是没有必要?
问题内容: 我正在学习Java Maven Selenium。我想要在Selenium中使用这样的东西。 打开网站(例如https://www.facebook.com) 单击登录的电子邮件字段 等待20秒 输入我的电子邮件 这是我的简单代码: 该代码不起作用。它只会打开Facebook,单击电子邮件字段并输入我的电子邮件ID,而不是等待10秒钟才输入我的电子邮件。 问题答案: 并且无法正常工作,