Appium自动化测试 - 使用Chrome调试模式获取App混
混合应用是原生APP+webview组成的,可以简单的理解为一个原生app的外壳,内部全是html页面。在处理这样的app的定位的时候 需要先定位原生APP上的按钮或者链接,然后点击按钮或者链接,然后经过appium提供的方法,进入webview页面,通过定位工具和方法进行元素定位(同web自动化元素定位)。
移动端
1.将手机与PC通过USB连接,开启USB调试模式;
- 使用360手机助手或在dos窗口输入adb devices查看手机驱动连接是否成功;
PC端
1.搭建Appium环境,并下载SDK
- 在Chrome的应用商店下载 ADB Plugin插件并安装,点击进入下载 ADB Plugin插件,进入调试模式;
- 此时页面显示了手机型号、驱动名称、APP要调试的WebView名称;
-
点击inspect,若成功加载与APP端相同界面的调试页面,则配置成功;
image.png
因为Appium是通过 chromedriver-port 9515进行通信,驱动安卓手机上的WebView;
所以需要查看手机系统的Android System WebView显示的Chrome版本,下载对应的chromedriver并添加到Appium的chromedriver目录,保证驱动程序版本对应。然后Appium后台启动时会自动重启chromedriver;
例如遇到这类问题:
An unknown server-side error occurred while processing the command. (Original error: unknown error: Chrome version must be >= 43.0.2357.0
解决方案:
1、查看手机的Android System WebView ,打开手机的设置>应用程序管理>全部,注意,一定要在全部里面找。
2、查找到Android System WebView应用,查看详情,显示版本号:55.0.2883.91,需要下载55~56版本的chromdriver
3、然后找到对应的Chromedriver版本进行下载。下载地址:chromedriver各版本下载。
注意:最新版本是:2.37,可通过对应版本的目录下的notes.txt查看。
4、在PC端找到Appium中chromdriver目录下,替换chromdriver.exe.我的路径是:D:\software\app tools\nodeV8.7.0Winx64\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
Appium切换context、切换webview
@Test
public void test1() {
logger.info("开始了------------------------");
Set<String> contexts = driver.getContextHandles();
for(String context:contexts) {
logger.info(context);
//会打印出 NATIVE_APP(原生app handle)和WEBVIEW_com.example.testapp(webview的 handle)
}
//进入webview中
driver.context((String) contexts.toArray()[1]);
WebElement vin = driver.findElement(By.xpath("//input[@ng-model=\"vehicleInfo.vin\"]"));
vin.clear();
vin.sendKeys("LFV2B21K1D0904712");
}
或者是
public static void getContextHandle(AndroidDriver<WebElement> driver) {
Set<String> context = null ;
for(int i=1;i<=20;i++){
context = driver.getContextHandles();
for(String contextName : context) {
System.out.println(contextName);//打印当前上下文
if(contextName!=null && contextName.contains("WEBVIEW_com.quantum.Tmsp7")||contextName.contains("WEBVIEW_com.tencent.mm:tools")){
switchTo_WEBVIEW(driver);
driver.getPageSource();
return;
}
if(i==20) assert false;
}
Log.goSleep(1);
}
}
public static void switchTo_WEBVIEW(AndroidDriver<WebElement> driver) {
String str = driver.currentActivity();//检查当前APP
for(int k=0;k<30;k++){
try {
if(str.equals(".MainActivity")){
driver.context("WEBVIEW_com.quantum.Tmsp7");
return;
}else if(str.equals(".plugin.webview.ui.tools.WebViewUI")){
driver.context("WEBVIEW_com.tencent.mm:tools");
return;
}
} catch (Exception e) {
if(k<10){
logger.info("switch...");
}if(k==30){
logger.fatal(driver, "switch fail!", e);
}
} finally{
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
}
}
为了预防端口被占用,请关闭91助手、杀毒软件等。
(1)启动appium
(2)运行cmd 输入 adb devices -l 查看UDID 如图:
(3)再在cmd中输入 appium -a 127.0.0.1 -p4723 -Uf4a4d8bb (-a表示ip,-p表示端口,-U表示设备的udid )
执行上述测试类即可。
image.png