本文介绍了不能够在网页视图真实设备中使用的iOS Appium应用hyprid自动化识别元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图用自动化ionic2 / Angular2和打字稿混合应用程序的版本。

我使用C#为code写作。
测试在BDD - specflow
版本:
的iOS 9.3.1
X code:7.3
Appium:1.4.13

我不能够swtiching语境的WebView后标识元素。

使用下面code调用IOSDriver

 私人IOSDriver< IOSElement>司机= NULL;公共IOSDriver< IOSElement> GetDriver(字符串platformVersion,串DEVICENAME,串UDID,串APPPATH,串serverUri)
{
    功能iosCapabilities =新功能();
    DesiredCapabilities能力= iosCapabilities.Get(platformVersion,DEVICENAME,UDID,APPPATH);
    司机=新IOSDriver< IOSElement>(新的URI(serverUri),能力,TimeSpan.FromSeconds(Constants.DriverWaitTime));
    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(Constants.ImplicitWaitTime));    VAR contextNames = driver.Contexts;
    driver.Context = contextNames [1];    。driver.FindElement(By.Xpath(定位))点击();}

设置能力,

 私人DesiredCapabilities能力=新DesiredCapabilities();capabilities.SetCapability(appium版,Constants.AppiumVersion);
capabilities.SetCapability(platformName,Constants.PlatformName);
capabilities.SetCapability(autoWebView,真);
capabilities.SetCapability(browserName,iOS的);
capabilities.SetCapability(platformVersion,Constants.PlatformVersion);
capabilities.SetCapability(设备名称,设备名称);
capabilities.SetCapability(应用程序,APPPATH);
capabilities.SetCapability(UDIDUDID);

是我设置能力,正确的方法是什么?


  1. 解决方案尝试:

    1. 我检查使用browserName capbility为空白/ Safari浏览器,但没有工作

    2. 另外,我安装了IOS-WebKit的调试代理,并使用在后台终端上我的Mac
    3. 开始代理

  2. 但问题是我不能够识别的WebView元素。

我在做什么

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

文本框的Xpath(我可以在appium检查窗口中查看):// UIAApplication的 / UIAWindow / UIAScrollView的 / UIAWebView的 / UIATextField

VAR contextNames = driver.Contexts

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

当我打电话

  diver.Context = contextNames [1]; //设置背景下的WebView

和刷新appium检查,我无法看到/识别单element.Everything消失。

为什么我不能看到/识别切换到网页视图后的元素。 (注:只要我切换回driver.Context =NATIVE_APP每个元​​素成为appium检查可见,但还是我不能点击)

它显示了错误的的元素无法使用给定的搜索参数位于

手动还当我尝试点击或使用appium检查的SendKeys它不会让我这样做(手动空空THA应用程序中使用检查器按钮后)。什么是这里的问题。帮助将是非常美联社preciated

Appium督察截图:

错误消息中显示appium窗口:

下面是Appium的全部日志(错误)

元素


解决方案

我认为你必须建立在UICatalog Appium


  1. 复制以x code此链接:


  2. 搜索,我们安装了UICatalog.app库
    Users/Library/Developer/X$c$c/DerivedData/UICatalog-bhmtevqhmgarbcgnqybxttbkqfvn/Build/Products/Debug-iphonesimulator/UICatalog.app


  3. 将其复制到应用程序路径Appium IOS设置

I was trying to automate the hybrid app build using ionic2/Angular2 and typescript.

I am using C# for code writing.test are in BDD - specflowVersions:iOS:9.3.1Xcode: 7.3Appium: 1.4.13

I am not able to identify elements after swtiching Context to WEBVIEW.

Calling IOSDriver using below code

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

}

Setting Capabilities as

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

Am I setting the capabilities in correct way?

  1. Solution tried:

    1. I checked using browserName capbility as blank/safari but didn't worked
    2. Also, I installed ios-webkit-debug-proxy and started proxy using terminal in background on my mac

  2. Problem is i am not able to identify elements in WEBVIEW.

What I am doing

After launching the app, in appium inspector I am able to see all the elements and I am trying to click on textbox to enter some value

Xpath of textbox(as i can view in appium inspector window): "//UIAApplication1/UIAWindow1/UIAScrollView2/UIAWebView1/UIATextField1"

var contextNames = driver.Contexts

is giving me list to views(In my case 2 views: NATIVE_APP, WEBVIEW_1)WebView context is dynamically updating from 1,2,3 and so on..

As soon as I call

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

and refresh the appium inspector I am not able to see/identify single element.Everything goes away.

Why I am not able to see/identify elements after switching to webview. (Note: As soon as I Switch back to driver.Context="NATIVE_APP" every element becomes visible in appium inspector but still I am not able to click)

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

Manually also when I try to tap or sendkeys using appium inspector it is not letting me do so(after lauching tha app manually using inspector button). What is the issue here. Help would be highly appreciated

Screenshot of Appium inspector:

Error message as displayed in appium window:

Here are the full logs of Appium(ERROR)

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

解决方案

I think you have to Set up UICatalog in Appium

  1. Copy this link in xcode : https://github.com/appium/ios-uicatalog

  2. Search the repository where we have the UICatalog.app installed Users/Library/Developer/Xcode/DerivedData/UICatalog-bhmtevqhmgarbcgnqybxttbkqfvn/Build/Products/Debug-iphonesimulator/UICatalog.app

  3. Copy it into app path in Appium ios settings

这篇关于不能够在网页视图真实设备中使用的iOS Appium应用hyprid自动化识别元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-23 10:24