如何在Appium中启用和使用WebView for iOS Automation

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

我正在尝试使用由Ionic2 / Angular2 / Typescript开发的Appium来自动化混合应用程序。

当我尝试识别元素时,我能够在Appium Inspector中看到WebView中的元素,但是当我尝试使用脚本识别它们时,它会抛出错误。

An element could not be identified using given search parameter.

error: Invalid locator strategy: partial link text

我试图通过Xpath,name,linkText识别元素,但我无法这样做。

我还通过添加功能启用webview功能

capabilities.SetCapability("autoWebView", "true");

我正在使用C#进行自动化。任何人都可以提供解决方案吗?

当我使用Xpath时,它显示处理命令时发生未知服务器端错误(原始错误:连接ECONNREFUSED)

在设置上述功能后调用var contextNames= driver.Contexts;时会显示以上错误。我还需要设置浏览器的功能???

c# webview automation appium appium-ios
3个回答
0
投票

两件事情 :

1.确保在webview代码中将setWebContentsDebuggingEnabled设置为true。

2.在访问webview上的元素之前,切换上下文并在操作后返回。类似于Java中的以下代码,用于切换到WEBVIEW:

Set<String> contextNames = driver.getContextHandles();
String setContext = contextNames.toArray()[1].toString();
driver.context(setContext);// set context to WEBVIEW_com.my.package

请阅读以下What exactly do autoWebview does?

对于dot-net客户端,类似的代码如下:

var contextNames = driver.GetContexts(); //correction to your code 
driver.SetContext(contextNames[1]); // for webview_1, for native_view 0

0
投票

1)第一选择

下面的代码将有助于将Native应用程序处理为webview

public void acceptalert(){
    Set<String> contextNames = idriver.getContextHandles();

    System.out.println(contextNames);

    for (String contextName : contextNames) {
      if (contextName.contains("NATIVE_APP")) {
        Reporter.log("Reaching to Native App", true);
        idriver.context(contextName);
        idriver.findElementByName("Open").click();
        Reporter.log("Clicking Open to naviagte to Native APP", true);
      }
      else{
        Reporter.log("Not found", true);
      }
    }
}

2)第二种选择:

try {
            //idriver.context("WEBVIEW_2");

            Set<String> contextNames1 = idriver.getContextHandles();
            for (String winHandle : idriver.getWindowHandles())
            {
                if (winHandle.contains("WEBVIEW_24")){
                    ((AppiumDriver) idriver).context(winHandle);
                    System.out.println("Switched to " + winHandle);
                    idriver.switchTo().window(winHandle);
                    idriver.findElementByName("Open").click();
                }

                else if (winHandle.contains("NATIVE_APP")) {
                    ((AppiumDriver) idriver).context(winHandle);
                    idriver.switchTo().window(winHandle);
                    System.out.println("Switched to " + winHandle);
                }
            }

        } catch (Exception e) {

        }

0
投票

即使使用后

capabilities.SetCapability("autoWebView", "true");

我们需要访问代理来处理webview

Set<String> contextNames = idriver.getContextHandles();

    System.out.println(contextNames);

    for (String contextName : contextNames) {
      if (contextName.contains("NATIVE_APP")) {
        Reporter.log("Reaching to Native App", true);
        idriver.context(contextName);
        idriver.findElementByName("Open").click();
        Reporter.log("Clicking Open to naviagte to Native APP", true);
      }
      else{
        Reporter.log("Not found", true);
      }
    }

或尝试使用ru代理来处理webview - 只是一个黑客

Ru在终端下面

ios_webkit_debug_proxy -c abad62540cbfc9f2af5c154985420a856e:27753 -d
© www.soinside.com 2019 - 2024. All rights reserved.