gpt4 book ai didi

java - Selenium 测试在 headless 模式下失败

转载 作者:行者123 更新时间:2023-11-29 04:51:50 25 4
gpt4 key购买 nike

我创建了一个 Selenium+jUnit 测试套件,它在通过 Eclipse 运行时运行良好,但抛出异常,主要是“元素当前不可见,因此可能无法与之交互”异常,当作为 teamcity 构建的一部分以 headless 方式运行时.

只是为了让您了解我是如何设置的,我在测试 setUp 方法中有以下内容:

driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().deleteAllCookies();

这是触发 ant 脚本的 shell 脚本,后者又运行测试套件。

echo "Executing Xvfb"
sudo nohup Xvfb :40 -ac -screen 0 1600x900x24 &

echo "Setting the DISPLAY"
export DISPLAY=:40

echo "Executing the ANT script"
ant

大部分错误都与这段代码有关:

....

UtilityMethods.waitUntilElementPresent(driver,By.id("add_section_button"));

Thread.sleep(3000);

driver.findElement(By.id("add_section_button")).click();

....

waitUntilElementPresent() 方法是这样的:

public static void waitUntilElementPresent(WebDriver driver, By by){

WebDriverWait wait = new WebDriverWait(driver, 20);

wait.until(ExpectedConditions.presenceOfElementLocated(by));

}

以上行产生以下错误:

Element is not currently visible and so may not be interacted with
Command duration or timeout: 30.03 seconds

请记住,它只发生在 headless 模式下,这在常规模式下工作正常。此外,不涉及 ajax,不透明度或可见性也没有问题。 30 秒超时确保有足够的时间。有什么问题吗?

顺便说一句,teamcity 在具有 jdk 1.8 和 FF 39 的 ubuntu 代理上运行这些测试。我在本地机器上有相同的规范。

最佳答案

您是否100% 确定该元素在 1600x900 显示器中可见?
也许你只需要向下滚动几个像素(我假设你的工作站有 1920x1080 分辨率,所以有更多的空间来显示内容)或者由于不同的配置文件设置而出现某种 Firefox 弹出窗口.

自己看截图吧。

WebDriver driver = new FirefoxDriver();
try {
doYourStuff();
} catch (Exception e) {
byte[] screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.BYTES);
Files.write(Paths.get("./screenshot.png"), screenshot, StandardOpenOption.CREATE, StandardOpenOption.WRITE);
} finally {
requiredCleanup();
}

关于java - Selenium 测试在 headless 模式下失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35176693/

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