做Hybrid混合应用自动化测试时,切换到WebView模式,查找控件并点击时,报错如下:
An unknown server-side error occurred while processing the command.
Original error: unknown error: Element is not clickable at point (108, 510).
Other element would receive the click:
<div style="position: absolute; z-index: 9999;
overflow: hidden; height: 6px !important; left: 2px; right: 2px; bottom: 0px;">...</div>
(Session info: chrome=43.0.2357.121)
仔细查看Html页面原码后,发现要点击的元素,是在frame框架里的。
所以解决办法是要先进入frame框架,然后查找元素并进行点击的操作。
关键代码如下(appium.java_client):
AppiumDriver<?> driver;
driver.getContextHandles(); ---得到所有的上下文环境
driver.context("WEBVIEW_包名"); ---切换到webView控件
driver.context("NATIVE_APP");---切换到原生应用
driver.switchTo.frame("frame控件的id"); ---切换到frame,除了使用它的id,还可以使用其它的方式进行切换,有些时候frame是没有给它的id属性的
driver.switchTo().defaultContent(); ---退出frame框架
WebElement ele=driver.findElement(By.cssSelector("button.f")); ---查找控件,当切换到webView控件里面时,就完全按照网页元素查找方式去使用即可
ele.getText(); ---得到元素的文本信息
手机web网页一般是H5开发的,对于元素的点击事件,一般绑定的事件是tap,(暂时还没有看到click事件的)所以对于手机web元素的点击,使用js的方式。例如下:
第一步:将driver转换成JavascriptExecutor接口对象
JavascriptExecutor js=driver;
第二步:触发控件的tap事件
js.executeScript("$('div.move:first').trigger('tap')");
这里使用了jquery语法