我已经创建了一个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代理上运行这些测试。我的本地机器上有相同的规格。
答案 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