#selenium-webdriver #webdriver #selenium-chromedriver #appium #appium-android
#selenium-webdriver #webdriver #selenium-chromedriver #appium #appium-android
Вопрос:
Я создаю тест автоматизации с использованием Appium и webdriverio:
const wdio = require("webdriverio");
const opts = {
path: "/wd/hub",
port: 4723,
capabilities: {
platformName: "Android",
platformVersion: "11",
deviceName: "Android Emulator",
app: "/path/to/myapk.apk",
automationName: "UiAutomator2",
autoGrantPermissions: true
}
};
async function main() {
const driver = await wdio.remote(opts);
const contexts = await driver.getContexts();
console.log("Contexts:", contexts);
await driver.deleteSession();
}
main();
Проблема
При выполнении тестов я мог видеть, что раньше у меня было два контекста:
NATIVE_APP
WEBVIEW_chrome
(или аналогично, я не помню точное значение здесь)
Затем я внес изменение, которое переключило контексты на webview, и там я получил сообщение об ошибке о том, что драйвер Chrome не найден. Именно тогда я его установил : npm install "appium-chromedriver"
.
Я не знаю, из-за этого ли все пошло прахом, но с тех пор, каждый раз, когда я тестирую, я вижу только собственный контекст, больше никакого контекста webview: (
Подробная информация
Важно отметить, что я изменил свое приложение для Android, чтобы включить это:
@Override
public void onCreate() {
super.onCreate();
WebView.setWebContentsDebuggingEnabled(true);
}
Я также могу запустить chrome://inspect
и увидеть, что webview есть, и даже проверить его. Но при выполнении тестов драйвер не может видеть контекст webview.
Почему? Как это исправить?
Ответ №1:
Оказывается, мне нужно дождаться появления webview в приложении, так что это работает:
async function main() {
const driver = await wdio.remote(opts);
// Wait a few seconds so the webview properly loads
await new Promise(resolve => setTimeout(resolve, 5000));
const contexts = await driver.getContexts();
console.log("Contexts:", contexts);
await driver.deleteSession();
}