Selenium 隐式vs显式vs流畅等待
隐式、显式和流畅的等待之间有什么区别Selenium 隐式vs显式vs流畅等待,selenium,selenium-webdriver,webdriverwait,implicitwait,fluentwait,Selenium,Selenium Webdriver,Webdriverwait,Implicitwait,Fluentwait,隐式、显式和流畅的等待之间有什么区别 如果我们在隐式等待中设置10秒,在10秒之前,在3秒内只找到元素 到时会发生什么?它将等待10秒或继续进行。ImplicitWait 是一种配置实例的实现,即驱动程序在一定时间内轮询实例(例如纳秒,微秒,毫秒,秒,分钟,小时或天)当试图查找一个或多个元素时,如果这些元素不立即可用。默认设置为0,这意味着驱动程序在找到一条或多条查找元素的指令时,将立即开始搜索并提供结果 在这种情况下,在重新加载网页后,立即搜索可能会/可能找不到一个或多个元素。因此,您可能面临
如果我们在隐式等待中设置10秒,在10秒之前,在3秒内只找到元素 到时会发生什么?它将等待10秒或继续进行。ImplicitWait 是一种配置实例的实现,即驱动程序在一定时间内轮询实例(例如
纳秒
,微秒
,毫秒
,秒
,分钟
,小时
或天
)当试图查找一个或多个元素时,如果这些元素不立即可用。默认设置为0,这意味着驱动程序在找到一条或多条查找元素的指令时,将立即开始搜索并提供结果
在这种情况下,在重新加载网页后,立即搜索可能会/可能找不到一个或多个元素。因此,您可能面临以下任何例外情况:
NoTouchElementException
TimeoutException
ElementNotVisibleException
ElementNotSelectableException
- Python:
driver.implicitly_wait(10)
driver.implicitly_wait(5)
driver.implicitly_wait(0)
- 爪哇:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
- Python:
driver.implicitly_wait(10)
driver.implicitly_wait(5)
driver.implicitly_wait(0)
- 爪哇:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
- Python:
driver.implicitly_wait(10)
driver.implicitly_wait(5)
driver.implicitly_wait(0)
- 爪哇:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
流畅的等待 是接口的实现,通过该接口,我们可以动态配置超时时间和轮询间隔。可以定义FluentWait实例来配置等待条件的最长时间以及必须检查条件的频率。用户还可以将等待配置为在等待元素时忽略特定类型的异常,例如页面上的NoTouchElementException
- 用法:
说明: ExplicitWait的这个实现在抛出// Waiting 30 seconds for an element to be present on the page, checking // for its presence once every 5 seconds. Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) .withTimeout(30, SECONDS) .pollingEvery(5, SECONDS) .ignoring(NoSuchElementException.class); WebElement foo = wait.until(new Function<WebDriver, WebElement>() { public WebElement apply(WebDriver driver) { return driver.findElement(By.id("foo")); } });
之前等待10秒,或者如果找到元素,它将在0到10秒内返回。默认情况下,WebDriverWait每500毫秒调用一次ExpectedCondition,直到它成功返回。ExpectedCondition函数类型的成功返回值是true或NOTNULL对象的TimeoutException
布尔值
预期条件: 在自动化Web浏览器以测试Web/Mobile应用程序时,经常会遇到一些情况。Java、C#和Python绑定包括这些方便的方法,因此我们不必自己编写ExpectedCondition类或为它们创建自己的实用程序包。一些预期条件包括:alertIsPresent()
elementtobelickable(定位器)
elementToBeSelected(WebElement)
frametobeavailable和switchtoit(定位器)
不可见性(元素)
此特定查询:- 在搜索单个元素时,驱动程序将轮询OM,直到找到该元素或配置的超时过期,然后抛出
李>NoTouchElementException
- 当搜索多个元素时,驱动程序将轮询DOM,直到找到至少一个元素或配置的超时已过期
因此,根据第一种情况,如果我们在隐式等待中设置10秒,并且在10秒之前,仅在3秒内找到元素,则驱动程序将仅等待3秒
该时间将继续,而不是等待设置的时间。隐式等待将告诉web驱动程序在抛出“NosTouchElementException”之前等待一定的时间。默认设置为0。一旦我们设置了时间,web驱动程序将在抛出异常之前等待该时间。若你们给了10秒作为等待时间,但元素被标识为3秒,那个么它将在3秒后进入下一步
显式等待是您定义的代码,用于在继续执行代码之前等待特定条件发生。显式等待将告诉web驱动程序在抛出NoTouchElementException异常之前等待某些条件,如ElementLocated的可见性和最长时间。如果我在时间之前完全满足了预期条件,那么您可以将此-同样的问题用于显式等待。届时将继续进行或等待提及时间?请在此处发布问题之前用谷歌搜索答案,如果您有具体疑问,请更新问题。