我目前正在Selenium中进行集成测试。我有一些测试集,它测试网络元素的存在及其行为。如果我在本地机器上运行这些测试,一切都会完美运行。作为一名网络驱动程序,我使用ChromeDriver。
但是,如果我在比特桶上的管道中运行这些测试,其中一些测试会失败。它之所以失败,是因为它无法定位元素,最糟糕的是,在管道中,它的行为有点不确定——它有时会定位这个元素,有时不会(在找到元素和找不到元素的运行之间没有代码更改,测试的网站在运行之间也没有更改。(
预期条件失败:等待由…定位的元素的存在(尝试了300秒,间隔500毫秒(
在我的本地机器上,30秒的超时时间对我来说已经足够了。而且测试总是在本地机器上通过。是比特桶上的管道运行非常缓慢,还是我错过了什么?
webDriver.get(getTerminalUrl());
WebDriverWait wait = new WebDriverWait(webDriver, 60);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[text()='Sign In']")));
WebElement login = webDriver.findElement(By.xpath("//*[text()='Sign In']"));
login.click();
我在所有的测试中都使用这种模式。
试着这样做:
webDriver.get(getTerminalUrl());
WebDriverWait wait = new WebDriverWait(webDriver, 60);
boolean elementPresent = driver.findElements(By.xpath("//*[text()='Sign In']")).size() > 0;
if(elementPresent){
Thread.sleep(3000);
WebElement login = webDriver.findElement(By.xpath("//*[text()='Sign In']"));
Thread.sleep(3000);
login.click();
}