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

问题描述

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

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

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

使用以下代码调用 IOSDriver

私有IOSDriver驱动程序 = 空;公共 IOSDriverGetDriver(string platformVersion, string deviceName, string udid ,string appPath, string serverUri){Capabilities iosCapabilities = new Capabilities();DesiredCapabilities 能力 = iosCapabilities.Get(platformVersion, deviceName, udid, appPath);driver = new IOSDriver(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();}

将能力设置为

私有 DesiredCapabilities 能力 = new DesiredCapabilities();capabilities.SetCapability ("appium-version", Constants.AppiumVersion);capabilities.SetCapability ("platformName", Constants.PlatformName);Capability.SetCapability("autoWebView", "true");capabilities.SetCapability("browserName", "iOS");Capability.SetCapability ("platformVersion", Constants.PlatformVersion);Capability.SetCapability("deviceName", deviceName);capabilities.SetCapability("app", appPath);Capability.SetCapability("udid", udid);

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

  1. 尝试的解决方案:

    1. 我检查了使用 browserName 能力作为空白/safari 但没有工作
    2. 另外,我安装了 ios-webkit-debug-proxy 并在我的 mac 后台使用终端启动代理

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

我在做什么

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

文本框的 Xpath(我可以在 appium 检查器窗口中查看):"//UIAApplication

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

这里是 Appium(ERROR) 的完整日志

无法识别 WEBVIEW 中的元素时的 Appium 日志链接

解决方案
  1. 从这里继续:如何在 Appium 中为 iOS 自动化启用和使用 WebView

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

var contextNames = driver.GetContexts();//更正你的代码driver.SetContext(contextNames[1]);
  1. 在使用 appium 时,您不一定需要以下功能:

    capabilities.SetCapability("browserName", "iOS");//也可以从代码中删除

  2. 我猜您可能正在尝试使用 Appium Inspector 以及运行/调试您的测试.在这种情况下,您可能无法同时使用这两个实例.请查看 appium 服务器日志以了解有关此内容的详细信息.

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

解决方案
  1. Continues of from here : How to enable and use WebView for iOS Automation in Appium

Try and use the following code to switch contexts :

var contextNames = driver.GetContexts(); //correction to your code 
driver.SetContext(contextNames[1]);
  1. You don't necessarily need the following capability while using appium :

    capabilities.SetCapability("browserName", "iOS"); //can be removed from code as well
    

  2. I am guessing you might be trying to use Appium Inspector along with running/debugging your tests. In which case you might not be able to use both the instances. Please look into the appium server logs for details on this.

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

09-23 10:24