gpt4 book ai didi

java - 如何通过 Selenium 正确配置隐式/显式等待和 pageLoadTimeout?

转载 作者:行者123 更新时间:2023-11-29 07:26:56 24 4
gpt4 key购买 nike

我目前有以下设置,但我不确定我的等待(隐式和 pageLoadTimeout)是否正常工作。 这是正确的实现吗?通过将它放在@Before("@setup") 中,它是否适用于每个场景或步骤定义运行?每次我调用@Given、@When..等时,司机会相应地等待吗?

@Before("@setup")
public void setUp() {

driver.manage().deleteAllCookies();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);


}

为什么要给下面的wait分配一个WebElement,WebElement 元素接收什么?这是正确的实现吗? -

 WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(id)));
boolean status = element.isDisplayed();

最佳答案

隐式等待()

implicitlyWait() 是告诉 WebDriver 实例,即 driver 在尝试查找一个或多个元素(如果它们不是立即可用的)时轮询 HTML DOM 一段时间.默认等待配置设置为 0。设置后,隐式等待 将设置为 WebDriver 对象实例的生命周期。

您的代码试用非常完美,如下所示:

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

这里你会在Using implicit wait in selenium中找到详细的讨论


pageLoadTimeout()

pageLoadTimeout() 设置在抛出错误之前等待页面加载完成的时间跨度。

您的代码试用非常完美,如下所示:

driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);

在这里你可以找到pageLoadTimeout in Selenium not working中的详细讨论

Note : Try to avoid configuring pageLoadTimeout() until and unless the Test Specification explicitly mentions about the same.


为什么要 WebDriverWait?

现代浏览器使用 JavaScriptAJAXReact Native ,其中网页中的元素是动态加载的。因此,在继续执行下一行代码 Explicit Waits 之前等待特定条件得到满足,即 WebDriverWait 是继续前进的方式。

Note : As per the official documentation of Explicit and Implicit Waits Do not mix implicit and explicit waits. Doing so can cause unpredictable wait times.

您的代码试验非常适合等待元素的可见性,如下所示:

WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(id)));

这里可以找到Replace implicit wait with explicit wait (selenium webdriver & java)的详细讨论


您的具体问题

  • 为什么需要将 WebElement 分配给以下等待:WebDriverWaitExpectedConditions 结合不仅返回 WebElement,而且还取决于 ExpectedConditions 也可以返回voidBooleanList

  • WebElement 元素接收什么?:根据您使用 ExpectedConditions 作为 visibilityOfElementLocated() 的代码块,WebElement 将一旦元素在网页的 DOM Tree存在并且可见,就会返回。 可见性是指元素不仅显示而且高度和宽度都大于0

  • 这是正确的实现吗?:您的实现近乎完美,但最后一行代码,即 boolean status = element.isDisplayed(); 是多余的因为 visibilityOfElementLocated() 在元素可见(即元素不仅显示而且还具有高度和宽度大于0)。

关于java - 如何通过 Selenium 正确配置隐式/显式等待和 pageLoadTimeout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50518467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com