Невозможно выбрать элемент WebView после переключения контекста в Appium - PullRequest
0 голосов
/ 02 апреля 2020

У меня странная проблема с webdriverio / appium при попытке протестировать приложение iOS. Приложение имеет WebView с кнопкой «Refre sh». Когда я пытаюсь проверить эту кнопку, я получаю сообщение об ошибке «не отображается» (см. Код ниже).

it('should have the Refresh button', () => {
    WebViewScreen.waitForWebsiteLoaded();

    // Verify that Refresh button is displayed
    WebViewScreen.switchToContext(CONTEXT_REF.WEBVIEW);
    const button = $('button=Refresh');
    expect(button).toBeDisplayed();
    WebViewScreen.switchToContext(CONTEXT_REF.NATIVE);
});

Обратите внимание, что я переключаю контекст на WEBVIEW перед проверкой кнопки. Глядя на журналы Appium, запрос найти кнопку ($('button=Refresh')) возвращает 404. Попробовал другой селектор: ['button[data-test="refresh-button"]'], но не go. Я даже поставил browser.debug () и запросил в REPL - все еще 404 - хотя я физически вижу кнопку на экране!

Я знаю, что мои настройки webdriverio / appium хороши, потому что точно такой же код работает для другого экрана iOS с WebView и кнопкой - единственное отличие - это имя кнопки.

Я также исключил возможность того, что мой селектор неверен, перейдя на отдельную веб-страницу и протестировав ее. кнопка - без ошибок в этом случае! Вот код автономной веб-страницы - единственное отличие заключается в отсутствии вызовов переключения контекста:

it('should have the Refresh button', () => {
    browser.url('https://example.site.com/');

    // Verify that Refresh button is displayed
    const button = $('button=Refresh')
    expect(button).toBeDisplayed();
});

Есть идеи, как это отладить? Есть ли какие-то нюансы при переходе в контекст WEBVIEW, которые мне не хватает?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Что происходит, когда вы переключаетесь на обычное веб-просмотр

public static void switch(AppiumDriver driver) {
    Set<String> contextNames = driver.getContextHandles();
    for (String context : contextNames) {
        log.debug("Context available:{}", context);
        if (StringUtils.startsWithIgnoreCase(context, "WEBVIEW")) {
            log.debug("Switch to WEBVIEW");
            driver.context(context);

        }
0 голосов
/ 03 апреля 2020

Наконец-то получил прорыв по этому вопросу - благодаря предложениям Алекси на форуме Appium . Оказывается, в моем приложении было несколько WebView, и мне пришлось переключать контекст на нужный. Хитрость заключается в том, чтобы установить параметр fullContextList в Appium, чтобы получить больше информации о доступных контекстах, а затем выбрать правильный.

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