开发者问题收集

在我的 Selenium 脚本中添加 Thread.sleep 会中断执行

2022-12-26
558

这是一个简单的 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

2个回答

必须为 InterruptedException 添加 throws 声明。如果已添加,则错误可能是由脚本流程引起的。根据等待 2 秒的情况,元素可能不可用。

rajeshs
2022-12-26

它可能正在发生,但是我们有隐式等待和显式等待。让我们使用显式等待而不是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();
Fouzan Jafri
2023-01-03