selenium - 隐式更改动态等待
问题描述
请评论我在 YouTube 上找到的以下代码。它检查当时是否存在元素
public boolean isElementPresent(By locator)
{
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
List<WebElement> list = driver.findElements(locator);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
if (list.size() == 0)
return false;
else
return list.get(0).isDisplayed();
}
它在方法中隐式地动态更改。在所有 Selenium 资源中始终声明implicitWait只能在测试类中设置一次。上面的代码在某种程度上类似于显式等待,因为它适应不同的情况。您对此代码有何看法?
在 Selenium 文档中,据说一旦设置,隐式等待就会设置为会话的生命周期。 但是,在上面的代码中,我们更改了两次implicitlyWait。文档有错吗?
解决方案
隐式等待
隐式等待是通知WebDriver实例在尝试查找一个或多个元素时轮询HTML DOM一段时间(如果它们在DOM 树中不立即可用)。
一旦设置,隐式等待设置为会话的生命周期
是的,你没看错。这是因为隐式等待是在WebDriver系统的远程端实现的。这意味着它们被嵌入到GeckoDriver、ChromeDriver、IEDriverServer等WebDriver变体中,这些变体被安装到匿名 Firefox/Chrome 配置文件和 Java 远程 WebDriver 服务器中。但是,您始终可以重新配置implicitlyWait。
您可以在使用 selenium 中的隐式等待中找到详细讨论
这个用例
从语法上讲,您的代码完美无缺。理想情况下,您将在寻找所需元素的同时设置隐式等待。一旦元素被识别并存储在列表中,您就可以将implicitlyWait重置回0。因此,您的代码块将是:
public boolean isElementPresent(By locator)
{
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
List<WebElement> list = driver.findElements(locator);
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
if (list.size() == 0)
return false;
else
return list.get(0).isDisplayed();
}
推荐阅读
- swift - 通过苹果应用商店应用内购买访问托管内容的问题:““内容”文件夹不存在。
- css - 使用第 n 个子选择器更改背景图像。(SASS)
- vba - VBA LongVar = range.find 测试变量是否为空
- php - 在 CodeIgniter 中正确使用 form_validation
- html - 绝对位置上的打字机动画问题
- python - 即使列仅包含整数,熊猫也总是将列转换为对象
- javascript - 是否有可能只执行一次功能?
- indy - Indy idHTTP 出错后继续执行
- unix - 简单的字数计算 rust 程序输出有效的标准输出,但当通过管道传输到具有特定内容的头部程序时会出现恐慌
- javascript - JS 与 JSON 一起工作 - 我使用括号错了吗?