【问题标题】:Protractor: find a text in a page量角器:在页面中查找文本
【发布时间】:2016-04-16 09:41:39
【问题描述】:

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

代码是这样的:

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、标签或其他)。
  3. 我检查该元素是否存在,否则我会收到错误消息。

你能告诉我是否有更好的方法来做到这一点?在步骤定义的开头使用 browser.sleep() 等待 DOM 加载是否正确?

重要提示:我没有使用 Angularjs

提前谢谢你。

【问题讨论】:

    标签: javascript testing protractor


    【解决方案1】:

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

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

    或者,normalize-space():

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

    附带说明,使用browser.sleep() 等待页面加载不太可靠,应避免使用。有更好的方法 - browser.wait()Expected Conditions

    【讨论】:

    • 好的,我认为我的特殊字符有问题。如果我的页面包含文本“我的兄弟 O'Brian”,而我搜索此文本,我什么也找不到。你知道如何避免这个问题吗?我试图逃避“'”,但它并没有解决问题。
    • @Ema.jar 是的,您需要转义 myText 变量中的引号,请参阅 stackoverflow.com/questions/770523/…
    猜你喜欢
    • 2019-04-02
    • 2015-05-07
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多