Невозможно переместить функции asyn c в объекты Appium PageObjects - PullRequest
0 голосов
/ 17 января 2020

Когда функция определена следующим образом, все работает, и мой тест успешно нажимает кнопку (код здесь упрощен и не вставляется при копировании, поэтому, если в описании заявки есть какие-либо синтаксические ошибки, это не ответ на заявку):

    const wdio = require("webdriverio");
    const options = require('./android.conf.js').config;

    describe('Main',async ()=> {
      it('Should click button', async ()=> {
        const client = await wdio.remote(options);
        const button = await client.findElement('id', 'app.debug:id/theID');
        await client.isElementDisplayed(button.ELEMENT).then(async () => {
          await client.elementClick(button.ELEMENT);
     })
})

Но я описываю страницу объекта следующим образом:

  function PageObjects() {

    this.clickButton = async (client)=> {
            const button = await client.findElement('id', 'app.debug:id/theID');
            await client.isElementDisplayed(button.ELEMENT).then(async () => {
              await client.elementClick(button.ELEMENT);
            });
    }
  };
    module.exports = PageObjects;

И моя функция такова:

    const wdio = require("webdriverio");
const options = require('./android.conf.js').config;
   const PageObjects = require('./po.js');

   describe('Main', async ()=> {
      const po = new PageObjects();
     it('Should click button', async ()=> {
       const client = await wdio.remote(options);
       po.clickButton(client);
      })
    })

Он перестает работать, и мой тест не может нажать кнопку больше! Что я делаю не так?

1 Ответ

0 голосов
/ 21 января 2020

Так что, очевидно, поскольку это асинхронный поток c, po.clickButton() пытается выполняться быстрее, чем описано в драйвере wdio. Чтобы предотвратить это, необходимо добавить await, чтобы все шаги теста выполнялись в правильном порядке:

     describe('Main', async ()=> {
       const po = new PageObjects();
       it('Should click button', async ()=> {
         const client = await wdio.remote(options);
         await po.clickButton(client);
       })
     })
...