在我的 Selenium 脚本中添加 Thread.sleep 会中断执行
这是一个简单的 Selenium 脚本,我在其中启动一个 URL 并执行几个单击操作。 当我在这几个步骤中的任何一个之间放置 Thread.sleep(2000) 时,执行会中断,并且会出现如下所示的异常。
2022 年 12 月 26 日下午 3:55:35 org.openqa.selenium.support.ui.ExpectedConditions findElement 警告:findElement(By.xpath: //button[text()='Continue']) 抛出的 WebDriverException org.openqa.selenium.NoSuchWindowException:没有这样的窗口:目标窗口已关闭 来自未知错误:未找到 Web 视图
如果我删除 Thread.sleep 步骤,它将继续进行。 有人能帮我理解为什么 Thread.sleep 会导致这个问题以及如何解决这个问题吗?
以下是代码:
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
options.addArguments("enable-automation");
options.addArguments("--no-sandbox");
options.addArguments("--disable-infobars");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--disable-browser-side-navigation");
options.addArguments("--disable-gpu");
driver = new ChromeDriver(options);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
wait = new WebDriverWait(driver, 30)
driver.get("<ApplicationURL>");
Thread.sleep(2000);
driver.findElement(By.xpath("<some button to click>")).click();
观察: 仅尝试使用 CHROME 浏览器时会出现此问题,而且仅在 MAC 上。 在 Windows 上,这可以正常工作。 仅供参考, Chrome 浏览器版本:108.0.5359.124 ChromeDriver 版本:108.0.5359.71 MAC OS 版本:Monterey 12.6.2 Java 版本:1.8.0_352 Selenium 版本:3.11.0
必须为 InterruptedException 添加 throws 声明。如果已添加,则错误可能是由脚本流程引起的。根据等待 2 秒的情况,元素可能不可用。
它可能正在发生,但是我们有隐式等待和显式等待。让我们使用显式等待而不是thread.sleep。
WebDriverWait wait = new WebDriverWait(driver, 30);
driver.get("<ApplicationURL>");
WebElement element = driver.findElement(By.xpath("<some button to click>"));
wait..until(ExpectedConditions.visibilityOf(element));
element.click();