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

Use element by css to check if element exists in Protractor

在量角器端到端测试中,我想使用 element(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.

之后我尝试使用一个 promise:

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

这会导致错误:

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

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

有人知道如何实现吗?还是 element(by.css()) 不是这里使用的方法?

您可以测试 element 是否与 isPresent 一起出现。 Here are the protractor docs 用于 isPresent 函数。

因此,您的代码将类似于:

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

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

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

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

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")
    }
});

相同,但语法不同

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