据我所知,显式等待是有条件的等待,如果在指定时间之前找到该元素,它将继续执行下一步。如代码中所示,即使在10秒之前找到元素,隐式等待也不应该执行下一步,而是立即执行下一步,即2秒以内。它不会在整个10秒内继续轮询DOM。还请根据示例建议如何决定要使用哪个等待时间?我经历了许多问题,但所有问题都是复制粘贴,期望在体系结构级别得到答案。
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
String appUrl = "https://www.facebook.com/";
driver.get(appUrl);
driver.manage().window().maximize();
WebElement username = driver.findElement(By.xpath("//input[@id='email']"));
答案 0 :(得分:0)
ImplicitWait用于指定 WebDriver 实例(即 driver )在搜索元素时应等待的时间(如果元素不立即出现在列表中)。 HTML DOM个NANOSECONDS
,MICROSECONDS
,MILLISECONDS
,SECONDS
,MINUTES
,HOURS
或DAYS
的项尝试查找一个或多个元素(如果不是立即可用)时。默认设置为 0 ,这意味着driver
会在找到一条或多条元素的指令时开始搜索并立即提供结果。
在这种情况下,在重新加载网页后,可能立即搜索到一个或多个元素。因此,您的Automation Script
可能面临以下任何例外情况:
因此,我们介绍 ImplicitWait 。通过引入 ImplicitWait , driver 将轮询DOM Tree,直到找到该元素已配置的时间,然后在抛出{之前寻找一个或多个元素。 {3}}。到那时,您一直在寻找的一个或多个元素可以在 HTML DOM 中使用。就像在您的代码中一样,您已经将 ImplicitWait 设置为 10 秒,驱动程序将轮询 HTML DOM 10 秒。
Java :
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
最后,一旦您设置了 ImplicitWait
,即 WebDriver
实例,即 driver
能够一直使用此配置直到其使用寿命。但是如果您需要将 WebDriver
实例的粗略时间(即 driver
)更改为 wait
,则可以按如下所示重新配置它:
Java :
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
如果您想随时取消 ImplicitWait
,可以按以下方式重新配置它:
Java :
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
Using implicit wait in selenium是您为 WebDriver 实例定义,配置和实现的代码块,以等待满足特定条件后再继续下一行代码。有一些方法可以帮助我们实施 ExplicitWait ,该方法只会等待所需的时间。 WebDriverWait 与 ExpectedCondition 相结合是实现 ExplicitWait 的方法之一。
Java :
driver.get("http://www.example.com/");
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("element_css"))).click();
此实现 ExplicitWait 最多等待10秒,然后抛出TimeoutException
,如果找到该元素,它将在0到10秒内返回。 WebDriverWait 默认情况下每500毫秒调用一次ExpectedCondition
,直到成功返回为止。 ExpectedCondition
函数类型的成功返回值是Boolean
值为true或非空对象。
自动化Testing Web/Mobile Applications
的Web浏览器时会遇到一些经常遇到的情况。 Java,C#和Python绑定包括这些便捷的方法,因此我们不必自己编写 ExpectedCondition
类或为它们创建我们自己的实用程序包。一些 Expected Conditions
是:
alertIsPresent()
elementToBeClickable(locator)
elementToBeSelected(WebElement)
frameToBeAvailableAndSwitchToIt(locator)
invisibilityOf(element)
在这里您可以找到ExplicitWait支持的所有方法。
您可以在Expected Conditions中找到详细的讨论。
Note
:请勿混用implicit and explicit waits
。这样做可能导致unpredictable wait times
。例如,将隐式等待设置为10秒,将显式等待设置为15秒,则可能导致20秒后发生超时。