Я использую 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
. Если бы кто-то мог объяснить цепочку, это было бы здорово.