我有一个循环,在这里我一个接一个地打开链接。在此循环中,我具有if语句,该语句检查:
如果我看不到名字,那么我会忽略它并继续循环播放。
List<WebElement> demovar = driver.findElements(By.xpath("//*[@id=\"big_icon_view\"]/ul/li/p/a"));
System.out.println(demovar.size());
ArrayList<String> hrefs = new ArrayList<String>();
for (WebElement var : demovar) {
System.out.println(var.getText());
System.out.println(var.getAttribute("href"));
hrefs.add(var.getAttribute("href"));
}
int i = 0;
for (String href : hrefs) {
driver.navigate().to(href);
System.out.println((++i) + ": navigated to URL with href: " + href);
if(driver.findElement(By.xpath("//a[@id='name']")).isDisplayed()) {
System.out.println("I can see Name");
} else {
System.out.println("I cant see Name");
}
Thread.sleep(3000); // To check if the navigation is happening properly.
}
为什么这不能正常工作?正如我所假设的,它应该具有以下内容:
答案 0 :(得分:1)
我不确定您在这里看到的错误消息是什么,但是如果您的代码无法正常工作,则很可能该元素未显示在页面上,因此在尝试查找该元素时会收到异常消息。
您可以捕获NoSuchElementException
来处理元素未出现在页面上的情况。
for (String href : hrefs) {
driver.navigate().to(href);
System.out.println((++i) + ": navigated to URL with href: " + href);
// create isDisplayed variable
boolean isDisplayed = true;
try {
isDisplayed = driver.findElement(By.xpath("//a[@id='name']")).isDisplayed();
}
catch(NoSuchElementException) {
isDisplayed = false;
}
// do something else here with isDisplayed
if (isDisplayed) { System.out.println("I can see Name"); }
else { System.out.println("I can not see Name"); }
}
此代码与您的代码几乎具有相同的功能,但是如果该元素未出现在页面上,我们会捕获NoSuchElementException
。
如果这对您不起作用,请随时在代码中发布错误消息或看到的结果,这将有助于查找问题。
答案 1 :(得分:0)
API声明以下
”使用给定的方法查找第一个WebElement。该方法受执行时有效的“隐式等待”时间的影响。findElement(..)调用将返回匹配的行,或重复尝试直到达到配置的超时。不应使用findElement查找不存在的元素,而应使用findElements(By)并声明零长度响应。”
这意味着,如果未找到该元素,它将一直尝试直到配置的超时并抛出NoSuchElementException异常-如果找不到匹配的元素
因此,最好通过以下方式处理
使用FindElements返回所有WebElement的列表,如果没有匹配项,则返回一个空列表,如下所示:
if(driver.findElements(By.ByXPath).size()<0)
使用try / catch / finally捕获NoSuchElementException和一个布尔标志来确定其是否存在。如果捕获到异常,则可以将boolean标志设置为false。
答案 2 :(得分:0)
在@Christine帮助之后,我为我解决了一个问题
for (String href : hrefs) {
driver.navigate().to(href);
boolean isPresent = driver.findElements(By.xpath("element")).size() > 0;
if (isPresent) {
String test = driver.findElement(By.xpath("element")).getText();
System.out.println(test);
} else {
System.out.println("Name not found");
}
Thread.sleep(3000); // To check if the navigation is happening properly.
}
}
}
这很好=)