Webdriverio TypeError: element.click не является функцией - PullRequest
0 голосов
/ 20 декабря 2018
async function t(e){
    return e;
}

async getByResourceId(id, wait= 5000){
        const elm = this.driver.$('android=new UiSelector().resourceId("'+id+'")');
        const telm = await t(elm);
}

Я пытаюсь автоматизировать приложение для Android с помощью appium и webdriverio, и у меня очень странная ошибка.Я использую функцию $ (это происходит и с функцией элемента) webdriver, чтобы найти элемент, который я затем передаю функции t.Когда я получаю его обратно, это другой объект.

Я попытался добавить задержку между первой и второй строкой в ​​getByResourceId, чтобы убедиться, что это не ошибка синхронизации:

async getByResourceId(id, wait= 5000){
            const elm = this.driver.$('android=new UiSelector().resourceId("'+id+'")');
            await _setTimeout(5000);
            //elm still OK (aka elm.click works)
            const telm = await t(elm);
            //telm is broken (aka getting TypeError: telm.click is not a function)
        }

Это не сработало.То, что ломает вяз, это возвращение обещания.У кого-нибудь есть идеи, как заставить это работать?

edit: Я нашел этот https://stackoverflow.com/a/47176108/10816010 очень полезным.по-видимому, мне пришлось использовать синхронный подход (используя тестер WDIO) и позволить тестировщику WDIO управлять синхронизацией, а не использовать асинхронное ожидание, чтобы получить требуемую функциональность.

edit 2: это не относится к версии 5 webdriverio

1 Ответ

0 голосов
/ 20 декабря 2018

Предполагая, что вы запускаете драйвер как:

const driver = await remote({
   port: 4723,
   logLevel: 'debug',
   desiredCapabilities: {
     // your caps here
   }
})

Вы можете использовать async-retry :

async getByResourceId(id, wait=5000){
  return await retry(async bail => {
    const el = await driver.element(`android=new UiSelector().resourceId("${id}")`)
    return el;
  }, {
    retries: 3,
    minTimeout: wait,
    driver: driver
  })
}

И вы можете проверить примеры wdio здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...