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

时间:2016-05-14 12:15:24

标签: c# webview automation appium appium-ios

我正在尝试使用由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识别elemnet,但我无法这样做。

我还通过添加

来启用功能中的webview
capabilities.SetCapability("autoWebView", "true");

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

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

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

的功能

3 个答案:

答案 0 :(得分:0)

两件事:

<强> 1 即可。确保在您的网络视图代码中将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

答案 1 :(得分:0)

1)首选

以下代码将有助于将本机应用处理为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) {

        }

答案 2 :(得分: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 proxy来处理webview-只是一个黑客

终端下方的Ru

ios_webkit_debug_proxy -c abad62540cbfc9f2af5c154985420a856e:27753 -d