Appium Hybrid混合应用 部分问题解决

1、找不到webview  Handle

Set the following in the onCreate method in your Android project.

WebView.setWebContentsDebuggingEnabled(true);

而且手机的应用是运行的,release版不可以

2、webview元素点击不响应

java中调用js,找到元素, chromedriver触发webview中的tap事件就可以实现了。

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("找到元素.dispatchEvent(new CustomEvent('tap', {detail: {},bubbles: true,cancelable: true}));");

JS获取HTML元素3个方法:document.getElementsByName()、document.getElementById()、document.getElementsByTagName()

新添加的方法document.getElementsByClassName()

3、webview窗口切换
    public static String  switchToWindow(AndroidDriver<AndroidElement> driver, int index) {

    String window = null;
    Object[] array = driver.getWindowHandles().toArray();
    window = array[array.length-1].toString();
    driver.switchTo().window(window);
    System.out.println("window:"+window);
    return window;
    }

4、获取webview页面元素信息,div,li标签可以,span标签不可以
JavascriptExecutor executor = (JavascriptExecutor) driver;
Object obj = executor.executeScript("return document.getElementsByClassName('intro')[1].innerText");
System.out.println(obj);


5、webview元素识别
使用谷歌浏览器,地址栏输入如下,即可看到webview页面
chrome://inspect/#devices

6、部分源码如下

@Test
    public void test00() throws InterruptedException{
    Thread.sleep(5000);
FrequentAction.product(driver);
Thread.sleep(5000);
//原生操作
driver.findElementById("XXX").click();
//当前页有h5页面
Set<String> contextNames = driver.getContextHandles();
for (String contextName : contextNames) {
// 遍历获取下来的context对象,若发现context对象包含WEBVIEW字样的时候,就切换到该对象下
if (contextName.contains("WEBVIEW")) {
driver.context(contextName);
}
}
//js实现点击操作
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("document.getElementsByClassName('mui-navigate-right goHistory')[0]."
+ "dispatchEvent(new CustomEvent('tap', {detail: {},bubbles: true,cancelable: true}));");
    }


猜你喜欢

转载自blog.csdn.net/qq_19299071/article/details/77941590