量角器:在页面中查找文本

时间:2016-01-11 22:35:04

标签: javascript testing protractor

我已创建此步骤定义以检查网页中是否存在给定文本。代码工作正常但有时候,特别是当我查找长文本时,即使文本存在于页面中,我也会收到错误。

代码是这样的:

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

  });

基本上我做了三件事:

  1. 我等待10秒钟以确保已加载DOM的所有元素。
  2. 我搜索一个元素(div,p,label或者其他),它包含我正在寻找的文本。
  3. 我检查元素是否存在,我得到一个错误。
  4. 你能告诉我是否有更好的方法吗?在步骤定义的开头使用browser.sleep()来等待DOM加载是正确的吗?

    重要提示:我没有使用Angularjs

    提前谢谢。

1 个答案:

答案 0 :(得分:2)

最有可能的问题是,您使用的是严格的文本匹配,但所需文本周围可能会有额外的空格或换行符。如果适用,您可以尝试使用contains()

element(by.xpath("//*[contains(., '" + myText + "')]"));

或者normalize-space()

element(by.xpath("//*[text()[normalize-space() = '" + myText + "']]"));

作为旁注,使用browser.sleep()等待页面加载不太可靠,应该避免。还有一种更好的方式 - browser.wait()Expected Conditions