我正在尝试使用由Ionic2 / Angular2 / Typescript开发的Appium来自动化混合应用程序。
当我尝试识别元素时,我能够在Appium Inspector中看到WebView中的元素,但是当我尝试使用脚本识别它们时,它会抛出错误。
An element could not be identified using given search parameter.
error: Invalid locator strategy: partial link text
我试图通过Xpath,name,linkText识别元素,但我无法这样做。
我还通过添加功能启用webview功能
capabilities.SetCapability("autoWebView", "true");
我正在使用C#进行自动化。任何人都可以提供解决方案吗?
当我使用Xpath时,它显示处理命令时发生未知服务器端错误(原始错误:连接ECONNREFUSED)
在设置上述功能后调用var contextNames= driver.Contexts;
时会显示以上错误。我还需要设置浏览器的功能???
两件事情 :
1.确保在webview代码中将setWebContentsDebuggingEnabled
设置为true。
2.在访问webview上的元素之前,切换上下文并在操作后返回。类似于Java中的以下代码,用于切换到WEBVIEW:
Set<String> contextNames = driver.getContextHandles();
String setContext = contextNames.toArray()[1].toString();
driver.context(setContext);// set context to WEBVIEW_com.my.package
请阅读以下What exactly do autoWebview does?
对于dot-net客户端,类似的代码如下:
var contextNames = driver.GetContexts(); //correction to your code
driver.SetContext(contextNames[1]); // for webview_1, for native_view 0
1)第一选择
下面的代码将有助于将Native应用程序处理为webview
public void acceptalert(){
Set<String> 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);
idriver.findElementByName("Open").click();
Reporter.log("Clicking Open to naviagte to Native APP", true);
}
else{
Reporter.log("Not found", true);
}
}
}
2)第二种选择:
try {
//idriver.context("WEBVIEW_2");
Set<String> contextNames1 = idriver.getContextHandles();
for (String winHandle : idriver.getWindowHandles())
{
if (winHandle.contains("WEBVIEW_24")){
((AppiumDriver) idriver).context(winHandle);
System.out.println("Switched to " + winHandle);
idriver.switchTo().window(winHandle);
idriver.findElementByName("Open").click();
}
else if (winHandle.contains("NATIVE_APP")) {
((AppiumDriver) idriver).context(winHandle);
idriver.switchTo().window(winHandle);
System.out.println("Switched to " + winHandle);
}
}
} catch (Exception e) {
}
即使使用后
capabilities.SetCapability("autoWebView", "true");
我们需要访问代理来处理webview
Set<String> 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);
idriver.findElementByName("Open").click();
Reporter.log("Clicking Open to naviagte to Native APP", true);
}
else{
Reporter.log("Not found", true);
}
}
或尝试使用ru代理来处理webview - 只是一个黑客
Ru在终端下面
ios_webkit_debug_proxy -c abad62540cbfc9f2af5c154985420a856e:27753 -d