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、名称、linkText 识别 elemnet,但我无法这样做。

我还通过添加启用 webview 功能

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

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

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

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

4

3 回答 3

0

两件事情 :

1 . 确保setWebContentsDebuggingEnabled在您的 webview 代码中设置为 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

请阅读以下内容,了解autoWebview 究竟做了什么?

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

var contextNames = driver.GetContexts(); //correction to your code 
driver.SetContext(contextNames[1]); // for webview_1, for native_view 0
于 2016-05-14T20:25:49.037 回答
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) {

        }
于 2018-09-07T02:24:33.717 回答
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);
      }
    }

或尝试使用代理来处理 webview - 只是一个 hack

Ru 在终端下方

ios_webkit_debug_proxy -c abad62540cbfc9f2af5c154985420a856e:27753 -d
于 2018-09-07T02:32:17.080 回答