Как передать драйвер webdriverio в функции для модульного дизайна? - PullRequest
0 голосов
/ 04 июля 2018

Я использую webdriverio для связи с сервером appium. Я пытаюсь автоматизировать взаимодействие с Instagram. Каждая автоматизация требует от меня входа и выхода. Итак, я думаю о написании функции, которая входит в систему и функции, которая выходит из системы.

В настоящее время у меня есть что-то похожее на это:

const wdio = require("webdriverio");
const opts = {...}
const client = wdio.remote(opts)

const login = (client, username, password) => {
  return client
    .click("#log_in_button")
    .click("#login_username")
    .keys(username)
    .click("#password")
    .keys(password)
    .click("#button_text");
}

const someOtherAction = (client) => {
  // More actions performed on client
  // ...
}

client.init();
login(client, "username", "password")
  .someOtherAction(client);

Это не работает ^^, однако тот же код при написании таким образом работает:

client
  .init()
  .click("#log_in_button")
  .click("#login_username")
  .keys("username")
  .click("#password")
  .keys("password")
  .click("#button_text")
  .waitForExist("~Activity") // Some other actions...

Я подозреваю, что это связано с неправильной настройкой this, я пытался посмотреть на источник webdriverio, но я не совсем понял. Итак, как я могу обойти драйвер, чтобы я мог писать более модульный, удобный и обслуживаемый код?

Кроме того, я не совсем понимаю, как работает эта цепочка команд, поскольку в документах API в http://webdriver.io ничего не говорится о возвращаемом значении вызовов функций, таких как click, keys и т. д., но, похоже, они работают так, как будто они возвращают client. Если бы кто-то мог объяснить цепочку, это было бы здорово.

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Таким образом, я добился модульности, сделав вход в систему функцией async и await для выполнения действия.

const login = async (client, username, password) => {
  await client
   .click("#log_in_button")
   .click("#login_username")
   .keys(username)
   .click("#password")
   .keys(password)
   .click("#button_text");
}

И затем использовать его как:

const client = wdio.remote(opts);
(async() => {
  await client.init();
  await login(client, 'username', 'password');
})();
0 голосов
/ 04 июля 2018

Рекомендуемый способ написания тестов с помощью WebdriverIO - через шаблон PageObject. В репозитории GitHub есть каталог example . Также неплохо было бы ознакомиться с разделом шаблон , где люди из сообщества WebdriverIO предоставили полезные стартовые пакеты для быстрого запуска.

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