代码之家  ›  专栏  ›  技术社区  ›  Majesty

量角器:自定义ExpectedConditions-属性更改时

  •  2
  • Majesty  · 技术社区  · 6 年前

    我正在尝试实现定制的ExpectedConditions方法,它将等待element属性的更改。

    以下是我的解决方案:

    const ECC = function() {
      /**
       * Expect element attribute to have specific value.
       *
       * @param {ElementFinder} elementFinder
       * @param {string} attrName attribute name to check
       * @param {string} attrVal attribute value to check for
       *
       * @return {boolean}
       */
      this.attributeToHave = async (elementFinder, attrName, attrVal) => {
        const EC = protractor.ExpectedConditions;
        const hasAttr = async () => {
          const actualText = elementFinder.getAttribute(attrName);
          return actualText.indexOf(attrVal) !== -1;
        };
    
        return await EC.and(EC.presenceOf(elementFinder), await hasAttr);
      };
    };
    
    module.exports = new ECC();
    

    在我的心里 onPrepare

    const {expectedConditions} = require('@utils/protractor');
    global.ECC = expectedConditions;
    

    最后在我的测试套件中:

     await browser.wait(await ECC.attributeToHave(dropdown, 'aria-hidden', 'false'), 3000);
    

    但它一直在说 Failed: Wait timed out after 3006ms

    1 回复  |  直到 6 年前
        1
  •  4
  •   yong    6 年前

    请使用以下更改重试:

    this.attributeToHave = async (elementFinder, attrName, attrVal) => {
        const EC = protractor.ExpectedConditions;
        const hasAttr = async () => {
          const actualText = await elementFinder.getAttribute(attrName); // should add await
          return actualText.indexOf(attrVal) !== -1;
        };
    
        return await EC.and(EC.presenceOf(elementFinder), await hasAttr()); // should call `hasAttr()` this function.
    };
    
    推荐文章