我试图使用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);
我是否以正确的方式设置功能?
我在做什么
启动应用程序后,在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检查器中都可见,但我仍然无法点击)
它显示错误为“使用给定的搜索参数无法找到元素”
手动也是当我尝试使用appium检查器点击或发送密钥时,它不允许我这样做(在使用检查器按钮手动启动应用程序之后)。这是什么问题。帮助将受到高度赞赏
时代督察截图:
appium窗口中显示的错误消息:
以下是Appium的完整日志(ERROR)
Link of Appium logs when not able to identify elements in WEBVIEW
尝试并使用以下代码切换上下文:
var contextNames = driver.GetContexts(); //correction to your code
driver.SetContext(contextNames[1]);
capabilities.SetCapability("browserName", "iOS"); //can be removed from code as well
我认为你必须在Appium中设置UICatalog
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设备)