我想使用Selenium WebDriver的findElement()
函数来检测页面上是否存在元素。无论我做什么,即使我抛出WebDriverException,Selenium也会退出代码。
我尝试使用此代码,但它并没有阻止Selenium退出:
if(driver.findElement(By.xpath(xpath) != null){
driver.findElement(By.xpath(xpath)).click();
System.out.println("Element is Present");
}else{
System.out.println("Element is Absent");
}
我做错了什么?
isDisplayed()
似乎也有类似的错误。我只是使用了错误的方法,还是我使用的方法不正确?
答案 0 :(得分:0)
是的,您可以使用findElements。我给你写了一个例子:
public WebElement element(WebDriver driver) {
List<WebElement> list = driver.findElements(By.xpath("xpath"));
if (list != null && !list.isEmpty()) {
return list.get(0);
}
return null;
}
element.click();
答案 1 :(得分:0)
您应该创建一个等待元素的方法,如果它存在或不存在,则返回true或false。这应该适合你 -
public boolean isElementPresent(final String xpath) {
WebDriverWait wait = new WebDriverWait(driver, 30);
try {
return wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
if (driver.findElement(By.xpath(xpath)).isDisplayed()) {
return true;
} else {
return false;
}
}
});
} catch (NoSuchElementException | TimeoutException e) {
System.out.println("The wait timed out, couldnt not find element");
return false;
}
}
这将尝试30秒来查看元素是否存在。将超时从30更改为您想要等待的时间。
然后从主代码中将xpath作为字符串发送到该方法,并在返回true时执行某些操作:
if (isElementPresent("xpath")) {
driver.findElement(By.xpath(xpath)).click();
} else {
System.out.println("Can't click on the element because it's not there");
}
基本上,
如果isElementPresent == true - &gt;单击元素 否则 - &gt;打印一些东西。