量角器 - 请参阅页面上的文字

Protractor - see text on page

我正在尝试在 Protractor 中编写测试,但没有将我的测试与页面的特定标记高度耦合。

例如,给定一个典型的登录页面,我想测试如果提供的凭据不正确,则会显示一条错误消息。

我的标记显示该错误的方式是:

<div class="alert alert-danger">
    <ul>
        <li>Invalid username or password.</li>
    </ul>
</div>

这个无序列表也可能包含其他错误 - 所以我不想对列表元素本身做出断言。无论如何,我可能会决定不再将错误显示为列表,而可能希望以其他方式显示它。

我想要的只是能够断言页面包含:无效的用户名或密码。

我希望能够做类似的事情:

expect(page.getContents()).to.contain('Invalid username or password.'); 

但这当然不行。

Protractor 中是否有任何可用的方法可以让我执行此操作?

您可以使用 element.getText()。

https://angular.github.io/protractor/#/api?view=webdriver.WebElement.prototype.getText :

Get the visible (i.e. not hidden by CSS) innerText of this element, including sub-elements, without any leading or trailing whitespace.

获取列表中的所有文本。然后 expect(text).toContain("Invalid username or password")

示例使用 angularjs.org:

 browser.driver.get('https://angularjs.org/')
    el = element(by.css('.first'))
    el.getText().then(function(text){expect(text).toContain("AngularJS is a toolset for")});

您可以使用 xPath select 包含您要查找的文本的 DOM 元素,然后检查该元素是否存在。

我正在使用此代码并且

var myText = "Invalid username or password.";
var selectedElement = element(by.xpath("//*[. = '" + myText + "']"));

expect(selectedElement.isPresent()).to.eventually.equal(true, "This text is not present in page.").and.notify(callback);

我已经在您的示例中测试了代码段并且有效。请注意,我使用的是 chai-as-promised,因此,如果您不认识语法,请不要担心。重要的是第二部分:expect(selectedElem)... 用于检查页面中是否存在该元素。

这对我有用:

expect(element(by.cssContainingText('*', 'Invalid username or password.')).isPresent()).toBeTruthy();