硒测试在无头模式下失败

时间:2016-02-03 12:09:52

标签: java firefox selenium selenium-webdriver

我已经创建了一个Selenium + jUnit测试套件,它在运行Eclipse时工作正常但抛出异常,主要是"元素当前不可见,因此可能无法与"进行交互。作为teamcity构建的一部分以无头方式运行时的异常。

为了让您了解我的设置方式,我在测试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

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

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

2 个答案:

答案 0 :(得分:2)

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();
}

答案 1 :(得分:1)

尝试使用PhantomJS而不是firefox