首页 文章

在真实设备上使用Appium在iOS hyprid app自动化中无法识别WEBVIEW中的元素

提问于
浏览
1

我试图使用ionic2 / Angular2和typescript自动化混合应用程序构建 .

我正在使用C#进行代码编写 . 测试在BDD中 - specflow版本:iOS:9.3.1 Xcode:7.3 Appium:1.4.13

在将Context切换到WEBVIEW之后,我无法识别元素 .

使用以下代码调用IOSDriver

private IOSDriver<IOSElement> driver = null;

public IOSDriver<IOSElement> GetDriver(string platformVersion, string deviceName, string udid ,string appPath, string serverUri)
{
    Capabilities iosCapabilities = new Capabilities();
    DesiredCapabilities capabilities = iosCapabilities.Get(platformVersion, deviceName, udid, appPath);
    driver = new IOSDriver<IOSElement>(new Uri(serverUri), capabilities, TimeSpan.FromSeconds(Constants.DriverWaitTime));
    driver.Manage ().Timeouts ().ImplicitlyWait (TimeSpan.FromSeconds(Constants.ImplicitWaitTime));

    var contextNames = driver.Contexts;
    driver.Context = contextNames[1];

    driver.FindElement(By.Xpath(locator)).Click();

}

将功能设置为

private DesiredCapabilities capabilities = new DesiredCapabilities();

capabilities.SetCapability ("appium-version", Constants.AppiumVersion);
capabilities.SetCapability ("platformName", Constants.PlatformName);
capabilities.SetCapability("autoWebView", "true");
capabilities.SetCapability("browserName", "iOS");
capabilities.SetCapability ("platformVersion", Constants.PlatformVersion);
capabilities.SetCapability("deviceName", deviceName);
capabilities.SetCapability("app", appPath);
capabilities.SetCapability("udid", udid);

我是否以正确的方式设置功能?

  • 尝试解决方案:

  • 我使用browserName capbility检查为空白/ safari但是没有用

  • 此外,我安装了ios-webkit-debug-proxy,并在我的mac后台使用终端启动了代理

  • 问题是我无法识别WEBVIEW中的元素 .

What I am doing

启动应用程序后,在appium检查器中我能够看到所有元素,我试图点击文本框输入一些值

文本框的Xpath(我可以在appium检查器窗口中查看): "//UIAApplication1/UIAWindow1/UIAScrollView2/UIAWebView1/UIATextField1

var contextNames = driver.Contexts

给我列表视图(在我的情况下2视图:NATIVE_APP,WEBVIEW_1)WebView上下文是从1,2,3等动态更新的 .

我打电话的时候

diver.Context=contextNames[1]; //setting context to WEBVIEW

并刷新appium检查器我无法看到/识别单个元素 . 一切都消失了 .

为什么我切换到webview后无法查看/识别元素 . (注意:只要我切换回driver.Context =“NATIVE_APP”,每个元素在appium检查器中都可见,但我仍然无法点击)

It shows error as "An element could not be located using given search parameter"

手动也是当我尝试使用appium检查器点击或发送密钥时,它不允许我这样做(在使用检查器按钮手动启动应用程序之后) . 这是什么问题 . 帮助将受到高度赞赏

Appium检查器的屏幕截图:

enter image description here

appium窗口中显示的错误消息:

enter image description here

以下是Appium的完整日志(ERROR)

Link of Appium logs when not able to identify elements in WEBVIEW

3 回答

  • 0

    尝试并使用以下代码切换上下文:

    var contextNames = driver.GetContexts(); //correction to your code 
    driver.SetContext(contextNames[1]);
    
    • 使用appium时,您不一定需要以下功能:
    capabilities.SetCapability("browserName", "iOS"); //can be removed from code as well
    
    • 我猜您可能正在尝试使用Appium Inspector以及运行/调试测试 . 在这种情况下,您可能无法同时使用这两个实例 . 请查看appium服务器日志以获取详细信息 .
  • 0

    I think you have to Set up UICatalog in Appium

    • 在xcode中复制此链接:https://github.com/appium/ios-uicatalog

    • 搜索我们安装了UICatalog.app的存储库Users / Library / Developer / Xcode / DerivedData / UICatalog-bhmtevqhmgarbcgnqybxttbkqfvn / Build / Products / Debug-iphonesimulator / UICatalog.app

    • 将其复制到Appium ios设置中的应用程序路径中

  • 0

    1)访问ios webview时 - 使用getcontextHandles我们可以实现

    设置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);
        sleepfor(1000);
        idriver.findElementByName("Open").click();
        Reporter.log("Clicking Open to naviagte to Native APP", true);
      }
      else{
        Reporter.log("Not found", true);
      }
    }
    

    2)如果上面的上下文不起作用 - 尝试运行iproxy在终端中运行它 - ios_webkit_debug_proxy -c deviceID:27753 -d deviceID - 获取设备ID(仪器-s设备)

相关问题