如何使用Java中的Selenium Webdriver检测元素的存在

时间:2016-11-08 15:29:14

标签: java selenium selenium-webdriver

我想使用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()似乎也有类似的错误。我只是使用了错误的方法,还是我使用的方法不正确?

2 个答案:

答案 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;打印一些东西。