51Testing软件测试论坛

标题: Appium - WebView测试(Android) [打印本页]

作者: 恭喜发财dife    时间: 2018-2-23 13:31
标题: Appium - WebView测试(Android)
现在App都是混合型的,有原生的也包含WebView的,appium测试的时候就需要在原生和WebView
之间切换才能完成测试。

1. 查看所有context

查看当前所有的窗口
  1. Set<String> contextNames = driver.getContextHandles();  
  2. System.print(contextNames);
复制代码
结果包含目前所有打开的app, 例如我打开了ES,我的被测应用,还有另外一个应用,
  1. [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方法切换到指定的应用
  1. <pre name="code" class="java">driver.context("WEBVIEW_com.test.android");  
  2. driver.findElementByID("wd");  
复制代码
切换完成后就可以像测试web应用一样测试了,所有的定位和web相同。
3. 切换到NativeApp

测试完web应用,需要操作原生应用的时候就需要切换回NATIVE_APP

我们可以通过context方法切换到原生应用
  1. <pre name="code" class="java">driver.context("NATIVE_APP");  
复制代码
这样之后的操作就都是原生应用的操作了
4. Demo
  1.    /**
  2.      * Switch to NATIVE_APP or WEBVIEW
  3.      * @param sWindow window name
  4.      */  
  5.     private void switchToWindow(String sWindow) {  
  6.         LogManager.getLogger(this.getClass()).info("Swith to window: " + sWindow);  
  7.         Set<String> contextNames = driver.getContextHandles();  
  8.         LogManager.getLogger(this.getClass()).info("Exists windows: " + contextNames.toString());  
  9.         for (String contextName : contextNames) {  
  10.             if (contextName.contains(sWindow)) {  
  11.                 driver.context(contextName);  
  12.                 break;  
  13.             }  
  14.         }  
  15.     }  
  16.   
  17.   
  18. switchToWindow("WEBVIEW_com.test.android");  
  19. driver.findElementByID("wd").sendKeys("test");  
  20. driver.findElementByID("sub").click();  
  21. switchToWindow("NATIVE_APP");  
复制代码




作者: 梦想家    时间: 2018-2-28 16:09





欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2