1

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

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

将上下文切换到 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);

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

  1. 尝试的解决方案:
    1. 我检查了使用 browserName 功能作为空白/野生动物园,但没有奏效
    2. 此外,我安装了 ios-webkit-debug-proxy 并在我的 Mac 上使用后台终端启动代理
  2. 问题是我无法识别 WEBVIEW 中的元素。

我在做什么

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

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

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 检查器中可见,但我仍然无法点击)

它显示错误为“使用给定的搜索参数无法找到元素”

当我尝试使用 appium 检查器点击或发送键时,手动也不允许我这样做(在使用检查器按钮手动启动 tha 应用程序之后)。这里有什么问题。帮助将不胜感激

Appium 检查器截图:

在此处输入图像描述

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

在此处输入图像描述

这是Appium的完整日志(错误)

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

4

3 回答 3

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

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

var contextNames = driver.GetContexts(); //correction to your code 
driver.SetContext(contextNames[1]);
  1. 使用 appium 时,您不一定需要以下功能:

    capabilities.SetCapability("browserName", "iOS"); //can be removed from code as well
    
  2. 我猜您可能正在尝试使用 Appium Inspector 以及运行/调试您的测试。在这种情况下,您可能无法同时使用这两个实例。有关详细信息,请查看 appium 服务器日志。

于 2016-05-17T13:11:55.140 回答
0

我认为你必须在 Appium 中设置 UICatalog

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

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

  3. 将其复制到 Appium ios 设置中的应用程序路径中
于 2016-05-18T16:02:54.967 回答
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 (instruments -s devices)

于 2018-09-07T02:20:05.963 回答