use*_*181 1 selenium selenium-webdriver webdriverwait fluentwait implicitwait
隐式、显式、流利等之间有什么区别?
如果我们在隐式等待中设置 10 秒,并且在 10 秒之前,则在 3 秒内只有元素被定位。
到时候会发生什么?它将等待 10 秒钟或继续进行。
ImplicitWait是配置WebDriver实例的实现,即驱动程序在尝试查找不立即可用的一个或多个元素时轮询HTML DOM一段时间(以NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS、MINUTES或HOURS为单位)。DAYS默认设置为0,表示驱动程序在找到查找一个或多个元素的指令时,将开始搜索并立即提供结果。
在这种情况下,在重新加载网页之后,在立即搜索中可能会/可能不会找到一个或多个元素。所以你的自动化框架可能面临以下任何异常:
\n\nNoSuchElementExceptionTimeoutExceptionElementNotVisibleExceptionElementNotSelectableException因此,您需要引发ImplicitWait。通过引入ImplicitWait,驱动程序将在配置的时间内轮询DOM 树,以查找一个或多个元素。到那时,您一直在寻找的一个或多个元素可能在 DOM 中可用。在您的代码中,您已经将ImplicitWait设置为10秒,驱动程序将轮询 DOM 10秒。
\n\nPython:
\n\ndriver.implicitly_wait(10)\nRun Code Online (Sandbox Code Playgroud)爪哇:
\n\ndriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);\nRun Code Online (Sandbox Code Playgroud)最后,一旦设置了 ImplicitWait , WebDriver实例(即驱动程序)就能够在其生命周期内携带此配置。但是,如果您需要更改WebDriver实例的粗略时间,即驱动程序等待,那么您可以按如下方式重新配置它:
\n\nPython:
\n\ndriver.implicitly_wait(5)\nRun Code Online (Sandbox Code Playgroud)爪哇:
\n\ndriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);\nRun Code Online (Sandbox Code Playgroud)如果在任何时候您想要取消ImplicitWait可以按如下方式重新配置它:
\n\nPython:
\n\ndriver.implicitly_wait(0)\nRun Code Online (Sandbox Code Playgroud)爪哇:
\n\ndriver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);\nRun Code Online (Sandbox Code Playgroud)Fluent Wait是Wait接口的实现,通过它我们可以动态配置超时和轮询间隔。可以定义FluentWait的实例来配置等待条件的最长时间以及必须检查条件的频率。用户还可以配置等待,以在等待元素时忽略特定类型的异常,例如页面上的NoSuchElementException 。
\n\n用法:
\n\n // Waiting 30 seconds for an element to be present on the page, checking\n // for its presence once every 5 seconds.\n Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)\n .withTimeout(30, SECONDS)\n .pollingEvery(5, SECONDS)\n .ignoring(NoSuchElementException.class);\n\n WebElement foo = wait.until(new Function<WebDriver, WebElement>() {\n public WebElement apply(WebDriver driver) {\n return driver.findElement(By.id("foo"));\n }\n });\nRun Code Online (Sandbox Code Playgroud)ExplicitWait(通常称为WebDriverWait)是FluentWait的专门实现,用户可以通过它定义、配置和实现 WebDriver实例,以等待满足特定条件,然后再继续执行下一行代码。有一些方法可以帮助我们实现ExplicitWait,它只等待需要的时间。WebDriverWait与ExpectedConditions结合是ExplicitWait 的方式之一是实现
\n\nimport org.openqa.selenium.WebElement;\nimport org.openqa.selenium.support.ui.ExpectedConditions;\nimport org.openqa.selenium.support.ui.WebDriverWait;\n.\n.\n.\nWebDriverWait wait = new WebDriverWait(driver, 10);\nWebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("element_xpath")));\nelement.click();\nRun Code Online (Sandbox Code Playgroud)\n\nExplicitWait的此实现在抛出 a 之前最多等待 10 秒TimeoutException,或者如果找到该元素,则它将在 0 到 10 秒内返回。WebDriverWait默认情况下每 500 毫秒调用一次ExpectedCondition,直到成功返回。ExpectedCondition函数类型的成功返回值为Booleantrue 值或非空对象。
在自动化 Web 浏览器来测试 Web/移动应用程序时,经常会遇到一些情况。Java、C# 和 Python 绑定包含这些方便的方法,因此我们不必自己编写ExpectedCondition类或为它们创建自己的实用程序包。一些预期条件是:
\n\nalertIsPresent()elementToBeClickable(locator)elementToBeSelected(WebElement)frameToBeAvailableAndSwitchToIt(locator)invisibilityOf(element)您可以找到Expected Conditions支持的所有方法。
\n\nNoSuchElementException.所以按照第一种情况,司机只会等待3秒。
\n| 归档时间: |
|
| 查看次数: |
4081 次 |
| 最近记录: |