gpt4 book ai didi

java - Selenium 在进入下一页之前需要 sleep

转载 作者:行者123 更新时间:2023-11-30 06:36:43 25 4
gpt4 key购买 nike

我目前正在学习Selenium,学到了很多东西。社区说了一件事;是你需要尽可能避免 thread.sleep 。 Selenium 使用隐式和显式等待进行替换。是的,我理解这个概念。

最近遇到一个问题。这是没有特定 Action 的情况;从登录页面转到另一个页面,而不使用 Thread.sleep(1000)。 Selenium 似乎太崩溃了:它找不到某个元素。我觉得这种行为很奇怪。所以我认为发生这种冲突是因为登录页面首先想要重定向到网站的主页并且没有 Thread.sleep(1000);它想要进入第二页,但登录页面拒绝它,因为它想要首先进入主页。话虽这么说,这就是 Selenium 崩溃的原因,或者你们在下面的示例中看到了代码的奇怪使用吗?

// Currently on a webpage   
WebElement ui_login_button = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("account-login-button")));
ui_login_button.click();
//After the click it logs in and redirects to a webpage

Thread.sleep(1000); // why sleep here? (without this Selenium crashes)

// Go to second page and perform actions

waitForLoad(driver);
driver.navigate().to(URL + "/mymp/verkopen/index.html");

/* -------------------------------------------------------------------

public void waitForLoad(WebDriver driver) {
ExpectedCondition<Boolean> pageLoadCondition = new
ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete");
}
};

//WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(pageLoadCondition);
}

抱歉,我已经尽力解释清楚了。英语不是我的母语。感谢您的帮助。

亲切的问候。

最佳答案

根据您的问题和更新的评论它引发了一个异常,即在网页上找不到该元素,这很有可能。此外,当您提到在其间插休眠眠并不是一个优雅的解决方案时,这是非常正确的,因为诱导 Thread.sleep(1000); 会降低整体测试的性能执行性能

现在,我在您的注释代码块中观察到将 document.readyStatecomplete 进行比较是一个更明智的步骤。但有时可能会发生这种情况,尽管 Web 浏览器会将 document.readyState 作为 complete 发送到 Selenium,但由于 JavaScriptAJAX 调用 我们想要与之交互的元素可能不可见可点击可交互这反过来又可能引发相关的异常

因此,解决方案是引入 ExplicitWait,即 WebDriverWait。我们将为要与之交互的元素引入“ExplicitWait”,并设置适当的“ExpectedConditions”。您可以找到有关 ExplicitWait here 的文档.

示例:

如果您想等待按钮可单击,则预期的代码块可能采用以下格式以及导入:

import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

// Go to second page and wait for the element
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.id("id_of_the_element")));
//perform actions
driver.navigate().to(URL + "/mymp/verkopen/index.html");

关于java - Selenium 在进入下一页之前需要 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45087766/

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