我正在从一页导航到另一页。它们都使用相同的模板,唯一的区别是.image-header__title类中包含的文本。 我想选择链接导航到另一页,并断言使用.gettext()到达了正确的页面,如下所示:
@Test
public void When_I_Click_patterns_page_is_returned() {
driver.get("https://test.co.uk/fabric-range/");
String actualString = fp.ClickPattern().getText();
assertTrue(actualString.contains("Semi-plain Fabrics"));
}
public WebElement ClickPattern() {
driver.findElement(By.cssSelector(".image-blocks .image-blocks__items .image-blocks__item:nth-child(7) a")).sendKeys(Keys.ENTER);
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(20, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
WebElement fabricType = wait.until(driver -> driver.findElement(By.cssSelector(".image-header__inner .image-header__content .image-header__title")));
return fabricType;
}
我正在等待.image-header__title出现,但是由于此元素位于初始登录页面上,因此getText()方法不是从第二页返回文本,而是从第一页返回文本。
无论如何,在执行getText()方法之前,我是否可以等待第二页加载?
答案 0 :(得分:0)
您知道您的应用程序是否在“ sendKeys(Keys.ENTER)”上重新加载页面,还是只是重新呈现HTML?此外,即使它确实重新加载了页面,后期加载事件是否也用于通过javascript生成HTML?
Selenium仅在页面加载时阻塞,因此,如果“ sendKeys(Keys.ENTER)”触发javascript重新呈现HTML,则它将不等待该过程完成,而是立即返回,并且结果表现出您看到的行为。
纯粹出于调试目的(!!!!!),您是否尝试过在“ sendKeys(Keys.ENTER)”和“ Webdriver wait”之间添加几秒钟的睡眠?假设这样做确实会导致返回更新后的文本,那么这确认您的应用程序没有重新加载,只是在重新呈现HTML。
还有其他诸如页面加载指示器之类的测试可以替代吗?如果有的话,您的“等到”将一直循环直到不显示加载指示符。一旦退出,您就可以继续知道您的页面已准备好与之交互。
答案 1 :(得分:0)
是,请使用ExpectedConditions#stalenessOf
。
e
e
过时
public WebElement ClickPattern() {
WebElement e = driver.findElement(By.cssSelector(".image-blocks .image-blocks__items .image-blocks__item:nth-child(7) a"));
e.sendKeys(Keys.ENTER);
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.stalenessOf(e));
return wait.until(ExpectedCondition.visibilityOfElementLocated(By.cssSelector(".image-header__inner .image-header__content .image-header__title")));
}
我认为您不需要第二次等待...但是您可以将它留在里面。