【问题标题】:Protractor expected condition for element containing any text包含任何文本的元素的量角器预期条件
【发布时间】:2015-05-13 15:46:02
【问题描述】:

有没有办法检查一个元素中是否有任何文本?我已经找到了textToBePresentInElement,但是这个函数会检查指定的值,如果失败则不会返回正确的错误。

我通过 API 填充元素,稍后加载,所以我希望浏览器等到元素中出现任何信息,然后检查正确的值。

另外,在 EC 失败时设法获取特定错误消息也非常有帮助:

browser.wait(EC.textToBePresentInElement(element(by.binding('myvar')), "expected"), 5000);

【问题讨论】:

    标签: angularjs testing selenium protractor end-to-end


    【解决方案1】:

    browser.wait() 的第三个参数是自定义错误消息:

    browser.wait(EC.textToBePresentInElement(element(by.binding('myvar')), "expected"), 5000, "Text is not something I've expected");
    

    另见:


    要等待一个元素包含任何文本,您可以编写一个自定义预期条件

    var EC = protractor.ExpectedConditions;
    
    var anyTextToBePresentInElement = function(elementFinder) {
      var hasText = function() {
        return elementFinder.getText().then(function(actualText) {
          return actualText;
        });
      };
      return EC.and(EC.presenceOf(elementFinder), hasText);
    };
    

    这里是用法:

    browser.wait(anyTextToBePresentInElement(element(by.binding('myvar'))), 5000);
    

    【讨论】:

    • 感谢这个有用的答案。 browser.wait() 函数的第三个参数非常完美。不幸的是,我无法运行自定义的预期条件。它说“未定义的功能”。是否有任何关于自定义预期条件的文档?
    • @abimelex 哎呀,我的错误,我已经更新了答案,检查一下。谢谢。
    • 前一阵子,但我想这是正确的解决方案。
    【解决方案2】:

    之前的代码 sn-p 工作形式,但有一个小的更新:return actualText; 应该是布尔值。所以整个代码将是:

    var anyTextToBePresentInElement = function(elementFinder) {
      var EC = protractor.ExpectedConditions;
      var hasText = function() {
        return elementFinder.getText().then(function(actualText) {
          return !!actualText;
        });
      };
      return EC.and(EC.presenceOf(elementFinder), hasText);
    };
    

    使用示例:

    var el = element(by.binding('myvar'));
    browser.wait(anyTextToBePresentInElement(el, 5000, 'Element still has no text');
    

    【讨论】:

      【解决方案3】:

      你可以看看这个

              export function titleType(textReference, expectedText)
              {
                  textReference.then(function(name)
                  {
                      if (name == expectedText)
                      {
                          expect(textReference).toContain(expectedText);
                          expect(name).toEqual(expectedText);
                      }
                      else
                      {
                          throw new TypeError("Wrong " + expectedText + "  name " + name);
                      }
                  });
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-28
        • 1970-01-01
        • 2020-10-27
        • 1970-01-01
        • 1970-01-01
        • 2018-11-23
        • 2021-10-03
        • 1970-01-01
        相关资源
        最近更新 更多