第一次发布海报,长时间用户收获所有这些重大问题的好处。但我需要你的帮助。
我在下面尝试做的是
if语句按需要执行,如果找到该元素,则它会导航回到前一个元素。但它失败的地方是点击页面的第二个链接。它会搜索该元素,即使该元素在该页面中不存在,并且即使我已明确声明返回,也不会退出该方法。
我有一个大脑放屁,并尝试了我能想到的所有可能的组合和修饰。如果有人可以帮助我,我会非常感谢你的帮助。
修改
让我编辑以澄清我的想法。一旦inactive.isDisplayed()返回false,我需要我的方法退出方法。但是当它导航到第二页时,它会不断尝试找到该元素,然后最终以NoSuchElementException失败。我知道元素不存在,这就是为什么我需要它退出方法并执行测试脚本的下一步。我希望这能澄清我的情况。它不是真正的Selenium WebDriver问题,因为它是一个java问题。
由于
public void checkErrors() {
List<WebElement> videos =driver.findElements(By.cssSelector(".row-
title"));
for (int i = 0; i < videos.size(); i++) {
videos = driver.findElements(By.cssSelector(".row-title"));
videos.get(i).click();
if (inactive().isDisplayed() != false) {
driver.navigate().back();
} else {
return;
}
}
return;
}
修改
private WebElement inactive() {
inactive =
driver.findElement(By.cssSelector("#message>p>strong"));
highlightElement(inactive);
return inactive;
}
答案 0 :(得分:1)
在检查是否显示消息之前,您可能需要检查消息是否存在:
public void checkErrors() {
for(int i = 0; ; i++) {
// handle next link
List<WebElement> videos = driver.findElements(By.cssSelector(".row-title"));
if (i >= videos.size())
return;
// click the next link
WebElement video = videos.get(i);
video.click();
// return if the message is missing or hidden
List<WebElement> messages = driver.findElements(By.cssSelector("#message>p>strong"));
if (messages.size() == 0 || !messages.get(0).isDisplayed())
return;
driver.navigate().back();
}
}
答案 1 :(得分:0)
小建议在这里帮助您:
由于您在检查了它是否显示后未使用inactive()
返回的WebElement,因此您可以移动逻辑以检查其是否显示为inactive()
并返回isDisplayed()
的值。例如:
private boolean inactive() {
try {
inactive = driver.findElement(By.cssSelector("#message>p>strong"));
highlightElement(inactive);
return inactive.isDisplayed(); // Element is present in the DOM but may not visible due to CSS etc.
} catch (NoSuchElementException e) {
return false; // Element is not present in the DOM, therefore can't be visible.
}
}