TA的每日心情 | 郁闷 2022-8-29 14:43 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]测试小兵
|
可能大部分人都知道了,或者有人写过了,我就当是个记录吧。
现在App都是混合型的,有原生的也包含WebView的,appium测试的时候就需要在原生和WebView
之间切换才能完成测试。
1. 查看所有context
查看当前所有的窗口
- Set<String> contextNames = driver.getContextHandles();
- System.print(contextNames);
复制代码 结果包含目前所有打开的app, 例如我打开了ES,我的被测应用,还有另外一个应用,
- [NATIVE_APP, WEBVIEW_com.test.android, WEBVIEW_com.estrongs.android.pop, WEBVIEW_com.xxxxx.sjj]
复制代码 NATIVE_APP就是我的被测应用原生界面
WEBVIEW_com.test.android 是我的被测应用打开的WebView
另外两个一个是ES, 一个其他的应用(混合型的)
2.切换到WebView
通过上面方法获得当前的所有context
我们可以通过context方法切换到指定的应用
- <pre name="code" class="java">driver.context("WEBVIEW_com.test.android");
- driver.findElementByID("wd");
复制代码 切换完成后就可以像测试web应用一样测试了,所有的定位和web相同。
3. 切换到NativeApp
测试完web应用,需要操作原生应用的时候就需要切换回NATIVE_APP
我们可以通过context方法切换到原生应用
- <pre name="code" class="java">driver.context("NATIVE_APP");
复制代码 这样之后的操作就都是原生应用的操作了
4. Demo
- /**
- * Switch to NATIVE_APP or WEBVIEW
- * @param sWindow window name
- */
- private void switchToWindow(String sWindow) {
- LogManager.getLogger(this.getClass()).info("Swith to window: " + sWindow);
- Set<String> contextNames = driver.getContextHandles();
- LogManager.getLogger(this.getClass()).info("Exists windows: " + contextNames.toString());
- for (String contextName : contextNames) {
- if (contextName.contains(sWindow)) {
- driver.context(contextName);
- break;
- }
- }
- }
- switchToWindow("WEBVIEW_com.test.android");
- driver.findElementByID("wd").sendKeys("test");
- driver.findElementByID("sub").click();
- switchToWindow("NATIVE_APP");
- driver.findElementByID("com.blossom.android:id/back").click();
复制代码
|
|