транспортир: пользовательские ExpectedConditions - при изменении атрибута

1

Я пытаюсь реализовать собственный метод ExpectedConditions, который будет ждать изменения атрибута элемента.

Вот мое решение:

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, что я делаю неправильно, пожалуйста?

  • 0
    Вы можете попробовать использовать мою библиотеку npmjs.com/package/oi-verify , просто реализуйте свой собственный предикат, как показано в примерах.
  • 0
    Спасибо за предложение, но у транспортира уже есть все необходимые функции для этой цели, мне просто нужно заставить его работать.
Теги:
selenium-webdriver
protractor
angularjs-1.7

1 ответ

3
Лучший ответ

Повторите попытку с нижеследующими изменениями:

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.
};
  • 0
    Это работает, спасибо! Теперь я вижу, где я ошибся

Ещё вопросы

Сообщество Overcoder
Наверх
Меню