使用css元素检查Protractor中是否存在元素

时间:2015-01-19 12:08:47

标签: angularjs protractor e2e-testing

在量角器端到端测试中,我想检查一个元素是否存在使用元素(by.css(...)),我的代码:

var myElement = element(by.css('.elementClass'));
expect(myElement).toBeUndefined;

此测试失败,它说:

    Expected { locator_ : { using : 'css selector', value : 'div[ng-switch-
    when="resultNav"]' }, parentElementFinder_ : null, opt_actionResult_ :
    undefined, opt_index_ : undefined, click : Function, sendKeys : Function, 
getTagName : Function, getCssValue : Function, getAttribute : Function, getText
 : Function, getSize : Function, getLocation : Function, isEnabled : Function, 
isSelected : Function, submit : Function, clear : Function, isDisplayed : 
Function, getOuterHtml : Function, getInnerHtml : Function, toWireValue : 
Function } to be undefined.

之后我尝试使用诺言:

element(by.css('.elementClass')).then( functtion(data) {
    expect(data.getText()).toBeUndefined();
});

这会导致错误:

Error: No element found using locator By.CssSelector(...)

是的,我知道不会找到任何元素,但是如何使用element(by.css(...))创建工作测试?

有谁知道如何实现这一目标?或者是元素(by.css())不是在这里使用的方法?

4 个答案:

答案 0 :(得分:87)

您可以测试element是否存在isPresentisPresent函数的Here are the protractor docs

所以,你的代码应该是这样的:

var myElement = element(by.css('.elementClass'));
expect(myElement.isPresent()).toBeFalsy();

答案 1 :(得分:23)

您需要测试元素是否不存在:

expect(element(by.css('.elementClass')).isPresent()).toBe(false);

答案 2 :(得分:2)

相同的东西,但语法不同

let elem = $('.elementClass');
let elemIsPresent = await elem.isPresent();
expect(elemIsPresent).toBe(false);

答案 3 :(得分:1)

Truthy和falsie指的是强制转换为布尔值后评估为true和false的值,除非您希望函数返回不同类型的值。

var myElement = element(by.css('.elementClass'));
myElement.isPresent().then(function (elm)
{
    if (elm)
    {
        console.log("... Element was found")
        expect(myElement.getText()).toBeUndefined();
    } else {
        console.log("... Element was not found")
    }
});