我正在尝试使用量角器编写测试,而没有将我的测试与页面的特定标记高度结合。
例如,给定一个典型的登录页面,我想测试是否提供了错误的凭据,出现错误消息。
我的标记显示该错误的方式是:
<div class="alert alert-danger">
<ul>
<li>Invalid username or password.</li>
</ul>
</div>
此无序列表也可能包含其他错误-因此,我不想对list元素本身进行断言。无论如何,我可能决定不再将错误显示为列表,并且可能希望以其他方式显示它。
我想要的是能够断言page包含:无效的用户名或密码。
我希望能够做类似的事情:
expect(page.getContents()).to.contain('Invalid username or password.');
但是,这当然行不通。
[量角器中有没有可用的方法可以使我做到这一点?
您可以使用element.getText()。
https://angular.github.io/protractor/#/api?view=webdriver.WebElement.prototype.getText:
获取此元素的可见(即未被CSS隐藏),包括子元素,而没有任何前导或尾随空格。
要从列表中获取所有文本。然后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选择包含要查找的文本的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);
我已经测试了您的示例中的代码片段,并且可以正常工作。请注意,我使用的是承诺的柴,所以,如果您不认识正税,那就不用担心。重要的是第二部分:expect(selectedElem)...
用于检查元素是否存在于页面中。
这对我有用:
expect(element(by.cssContainingText('*', 'Invalid username or password.')).isPresent()).toBeTruthy();