如果元素没有显示isDisplayed(),我收到错误

时间:2016-12-11 21:17:00

标签: javascript selenium selenium-webdriver

我的方案

  1. 访问特定页面
  2. 在显示元素时,我应该点击它
  3. 如果没有显示此元素,请忽略
  4. 我的代码

    exports.checkButton = function (driver) {
    
        driver.findElement(By.css(".btn.btn-danger.pull-right.remove-promotion")).then(function(button){ 
    
            if (button.isDisplayed()) {
    
                console.log("Displaying"); 
    
        } else { 
    
                console.log("not displayed");
    
        }
    });
    

    我的问题

    如果未显示该元素,则不会显示消息console.log("not displayed");并且我收到错误消息:

    Uncaught NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":".btn.btn-danger.pull-right.remove-promotion"}
    

3 个答案:

答案 0 :(得分:1)

isDisplayed()只能在DOM中存在元素时使用,但必须隐藏(例如,包含style="display: none")。 我认为,在你的情况下,当元素没有显示时,元素不存在于DOM中,这就是你得到异常NoSuchElementError的原因。

请尝试:

export.checkButton = function (driver) {    
        driver.findElement(By.css(".btn.btn-danger.pull-right.remove-promotion")).then(function(button){ 
            console.log("Displaying");
            button.click();
            return true;
        }).catch(function (ex) {
            console.log("not displayed");
            return false;
        });
}

var display = checkButton(driver);
while (display) {
    display = checkButton(driver);
}

注意:您应首先检查DOM以查看它在两种情况下的行为 - 当元素存在且不存在时。

答案 1 :(得分:0)

如果要确保显示元素,首先需要确保它实际存在于DOM中。在Java中,您可以这样检查:

public boolean isElementPresentInDom(By by) {
    driver.manage().timeouts().implicitlyWait(0, TimeUnit.MILLISECONDS);
    boolean isElementPresent = (driver.findElements(by).size() != 0);
    driver.manage().timeouts().implicitlyWait(driverTimeOut, TimeUnit.MILLISECONDS); // I have a driverTimeOut variable, I set the default timeout to zero in the beginning of this method to make it fast, then I set it to my driverTimeOut again. I recommend you to do the same :)
    return isElementPresent;
}

(不知道如何在Javascript中完全翻译它,但你有主要想法。) 如果此方法返回true,则可以检查是否显示了元素。

答案 2 :(得分:0)

使用.isDisplayed()假设元素存在。您收到该错误,因为该元素不存在。您的定位器已关闭或元素可能尚未加载,等等。使用.findElements()(复数)并确保大小为> 0来查看元素是否存在。理想情况下,您可以将其包装在函数中并在需要时使用它。确定元素存在后,然后检查.isDisplayed(),代码应该有效。