量角器 - 见页面上的文字

时间:2015-11-13 10:46:04

标签: javascript testing protractor e2e-testing

我正在尝试在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中是否有任何方法可以让我这样做?

3 个答案:

答案 0 :(得分:5)

您可以使用element.getText()。

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

  

获取此元素的可见(即未被CSS隐藏)innerText,包括子元素,没有任何前导或尾随空格。

从列表中获取所有文本。然后

使用angularjs.org的例子:

expect(text).toContain("Invalid username or password")

答案 1 :(得分:2)

您可以使用xPath选择包含您要查找的文本的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-promise,所以,如果你不认识sintax,请不要担心。重要的是第二部分:expect(selectedElem)...用于检查页面中是否存在该元素。

答案 2 :(得分:1)

这对我有用:

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