我创建了此步骤定义来检查网页中是否存在给定文本。代码工作正常,但有时,特别是当我查找长文本时,即使页面中存在该文本,我也会收到错误。
代码是这样的:
this.Then(/^The text "([^"]*)" exists in page$/, function(myText, callback){
browser.sleep(10000);
var selectedElement = element(by.xpath("//*[. = '" + myText + "']"));
expect(selectedElement.isPresent()).to.eventually.equal(true, "This text is not present in page").and.notify(callback);
});
基本上我做了三件事:
- 我等待 10 秒以确保 DOM 的所有元素均已加载。
- 我搜索一个包含我要查找的文本的元素(div、p、标签或其他)。
- 我检查该元素是否存在,否则会出现错误。
您能告诉我是否有更好的方法吗?在步骤定义的开头使用 browser.sleep() 来等待 DOM 加载是否正确?
重要提示:我没有使用 Angularjs
提前谢谢您。
最佳答案
问题很可能是因为您使用的是严格的文本匹配,但所需文本周围可能有额外的空格或换行符。您可以尝试使用 contains()
如果适用:
element(by.xpath("//*[contains(., '" + myText + "')]"));
或者,与 normalize-space()
:
element(by.xpath("//*[text()[normalize-space() = '" + myText + "']]"));
顺便说一句,使用 browser.sleep()
等待页面加载不太可靠,应该避免。有更好的方法 - browser.wait()
和 Expected Conditions .
关于javascript - Protractor :在页面中查找文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34732410/