我试图使用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检查器的屏幕截图:
appium窗口中显示的错误消息:
以下是Appium的完整日志(ERROR)
Link of Appium logs when not able to identify elements in WEBVIEW
3 回答
尝试并使用以下代码切换上下文:
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设置中的应用程序路径中
1)访问ios webview时 - 使用getcontextHandles我们可以实现
设置contextNames = idriver.getContextHandles();
2)如果上面的上下文不起作用 - 尝试运行iproxy在终端中运行它 - ios_webkit_debug_proxy -c deviceID:27753 -d deviceID - 获取设备ID(仪器-s设备)