我正在尝试使用由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识别elemnet,但我无法这样做。
我还通过添加
来启用功能中的webviewcapabilities.SetCapability("autoWebView", "true");
我正在使用C#进行自动化。任何人都可以提供解决方案吗?
当我使用Xpath时,它显示处理命令时出现未知服务器端错误(原始错误:连接ECONNREFUSED)
在设置上述功能后调用var contextNames= driver.Contexts;
时会显示以上错误。我是否还需要设置浏览器???
答案 0 :(得分:0)
两件事:
<强> 1 即可。确保在您的网络视图代码中将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 :(得分:0)
1)首选
以下代码将有助于将本机应用处理为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) {
}
答案 2 :(得分:0)
即使使用
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 proxy来处理webview-只是一个黑客
终端下方的Ru
ios_webkit_debug_proxy -c abad62540cbfc9f2af5c154985420a856e:27753 -d