Java SeleniumWebDriver if-else语句
第一次张贴海报,长期用户从所有这些伟大的问题中获益。但我需要你的帮助 下面我想做的是Java SeleniumWebDriver if-else语句,java,selenium,webdriver,Java,Selenium,Webdriver,第一次张贴海报,长期用户从所有这些伟大的问题中获益。但我需要你的帮助 下面我想做的是 导航到一个页面 找到所有特定的链接 点击第一个链接 检查元素是否显示,如果显示,则导航回上一页并单击列表的下一个链接。如果未显示,则退出该方法并继续测试脚本。这就是我被卡住的地方 if语句根据需要执行,如果它找到元素,那么它将导航回上一个元素。但它失败的地方是当它点击页面的第二个链接时。它搜索该元素,即使该元素在该页面中不存在,也不会退出该方法,即使我已显式声明了return 我脑子里出了个屁,尝试了我能想到的
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;
}
在检查消息是否显示之前,您可能需要先检查消息是否存在:
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();
}
}
public void checkErrors(){
对于(int i=0;i++){
//处理下一个链接
列表视频=driver.findElements(By.cssSelector(“.row title”);
如果(i>=videos.size())
返回;
//单击下一个链接
WebElement video=videos.get(i);
video.click();
//如果消息丢失或隐藏,则返回
List messages=driver.findElements(By.cssSelector(“#message>p>strong”);
if(messages.size()==0 | |!messages.get(0).isDisplayed())
返回;
driver.navigate().back();
}
}
这里有一些小建议可以帮助您:
由于您在检查是否显示后没有使用由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.
}
}
嗨,萨米,你能分享
inactive()
方法的代码吗?嗨,汤姆,我用inactive方法编辑了我的文章。尽管它工作得很好。基本上,我的java逻辑需要一些修正。所谓不退出,你是指的不断循环,或者你有错误?嗨,伙计,我编辑了我的帖子,以澄清我的想法,所以我也将其发布在这里:让我编辑以澄清我的想法。我需要我的方法在不活动时退出该方法。isDisplayed()返回false。但是,当它导航到第二个页面时,它会不断尝试查找元素,然后最终失败,出现NosTouchElementException。我知道元素不存在,这就是为什么我需要它退出方法并执行测试脚本的下一步。我希望这能澄清我的情况。这不是一个真正的SeleniumWebDriver问题,因为它是一个java问题。谢谢你在inactive
方法中尝试捕获NoTouchElement
异常了吗?嗨,Florent,这成功了!非常感谢你的帮助!我非常感激:)嗨,汤姆,你的解决方案也奏效了!虽然我不能使视频为空,否则我将无法点击视频。我知道我的问题还不够清楚,但谢谢你的帮助,我非常感谢。Doh忘记了for循环中使用了视频列表的大小!
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.
}
}