在Appium中切换上下文后无法选择WebView元素

问题描述 投票:0回答:2

尝试测试iOS应用时,我遇到了webdriverio / appium的奇怪问题。该应用程序具有一个带标签为“刷新”的WebView。当我尝试测试此按钮时,出现“未显示”错误(请参见下面的代码)。

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"]'],但没有。我什至放了一个browser.debug()并在REPL中查询-仍然是404-尽管我实际上可以在屏幕上看到该按钮!

我知道我的webdriverio / appium设置很好,因为完全相同的代码可用于带有WebView和按钮的另一个iOS屏幕-唯一的区别是按钮名称。

我还通过进入独立的网页并测试该按钮来排除我的选择器不正确的可能性-在这种情况下,没有错误!这是独立的网页代码-唯一的区别是没有上下文切换调用:

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上下文的任何细微之处吗?

appium webdriver-io appium-ios
2个回答
0
投票

[在这方面终于取得了突破-感谢Alexi's suggestions on the Appium forum。原来,我的应用程序中有多个WebView,并且不得不将上下文切换到正确的WebView。诀窍是在Appium上设置fullContextList选项以获得有关可用上下文的更多信息,然后选择合适的上下文。


0
投票

切换到常规网络视图时会发生什么

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);

        }
© www.soinside.com 2019 - 2024. All rights reserved.