如果 运行 通过 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();
}
我目前正在从事 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();
}