如果 运行 通过 Bitbucket 管道,则无法通过 Selenium 定位元素

Unable to locate elements via Selenium if ran via Bitbucket pipeline

我目前正在从事 Selenium 的集成测试。我有一些测试集,用于测试网络元素的存在及其行为。如果我 运行 在我的本地机器上进行这些测试,一切都会完美无缺。作为 WebDriver,我使用 ChromeDriver。

但是其中一些测试失败了,如果我 运行 它们在 bitbucket 上的管道中。它失败是因为它无法定位元素,最糟糕的是,在管道中它的行为有点不确定 - 它有时会找到这个元素,有时却不会(在 运行 之间没有代码更改,其中元素是找到和未找到哪个元素,测试的网站在 运行 秒之间也没有更改。)

Expected condition failed: waiting for presence of element located by... (tried for 300 second(s) with 500 milliseconds interval)

在我的本地机器上,速度不是很快,30 秒的超时对我来说已经足够了。测试总是在我的本地机器上通过。是 bitbucket 运行 上的管道非常慢还是我错过了什么?

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