Mocha / Chai - 仅当元素存在,显示或存在时测试才能单击元素

时间:2016-08-18 11:04:11

标签: javascript selenium selenium-webdriver mocha chai

我刚刚开始考虑使用Mocha / Chai框架和Selenium实现测试。我正在努力使用登录功能。我想检查一个项目是否存在/显示&如果是的话,点击它。

目前我的测试等待页面加载&我想要的东西如下,目前不起作用:

var elementOnPage = driver.findElement(By.('elementId')).isDisplayed();
//var elementOnPage = driver.findElement(By.('elementId')).exist;

if(elementOnPage == true){
  driver.findElement(By.('elementId')).click();
  }
else{
  driver.findElement(By.('anotherElement')).click();
  }

我也尝试过上面注释掉的线,但似乎都没有效果。代码似乎总是在继续之前触及if语句的第二部分。如果我正在检查的元素存在,那么测试执行下一行,但如果它不存在则测试失败并显示“NoSuchElementError:No such element”。

我也没有意识到我可以使用exists(),isPresent()或isElementPresent()之类的东西。

有没有人有任何想法或指出我正确的方向?我对此很陌生。

干杯

1 个答案:

答案 0 :(得分:1)

isDisplayed的返回值是一个承诺,但您将其视为布尔值。

您需要执行以下操作:

driver.findElement(By.id('elementId')).isDisplayed().then(function (displayed) {
    if (displayed) {
        driver.findElement(By.id('elementId')).click();
    }
    else{
        driver.findElement(By.id('anotherElement')).click();
    }
});

或者更简洁:

driver.findElement(By.id('elementId')).isDisplayed().then(function (displayed) {
    driver.findElement(By.id(displayed ? 'elementId' : 'anotherElement')).click();
});

顺便说一下By.('elementId')无法正常工作。我以为你的意思是By.id('elementId')