混合app

一、如何判断是否是混合app呢?

打开uiautomatorviewer.bat进行查看,在框住的元素都定位不到,只能定位大框,且旁边显示的是webView,那这个页面就是混合页面,所以这个app为混合app;这种app有原生app还有h5页面,或者说单纯的就套了一个安卓的壳子,里面其实全部是h5;

二、如何查看混合界面的元素?

1. 需要在源码中打开应用的webviewdebug

2. 在谷歌浏览器中 输入:    chrome://inspect 即可看到已连接的手机,如果已经打开含有h5的app则显示下面图示,观察图示可看到报名,手机信息,点inspect可进入查看html信息;如果是真机,可能还会把屏幕投在这里;

3. 定位视图:inspect——点搜索框——》点模拟器上的元素,高亮显示的就是定位的元素

三、如何定位元素:

1、xpath 定位

driver.findElement(By.xpath("//a[@title='蜗牛泉的自动化测试练习']")).click();

2、id 定位

driver.findElement(By.id("carousel-recommendation")).click();

3、linkText 定位

driver.findElement(By.linkText("appium -doctor报错")).click();

4、通过css的id属性定位(#id值)——》id选择器

//定位属性id为carousel-recommendation的这个元素
driver.findElement(By.cssSelector("#carousel-recommendation")).click();

5、通过css的class属性定位(. class值)——》类选择器

driver.findElement(By.cssSelector(".carousel slide")).click();

6、通过其他属性定位,如下面a标签的href属性进行定位

driver.findElement(By.cssSelector("a[href='http://ask.testfan.cn/question/866']")).click();

四、遇到的问题(用途:需要测试的apk不是自公司的)

在使用路径安装的driver时,有可能会把这个app强制转换成原生的,这种情况下可使用原生对的进行定位,观察图示发现使用content-desc定位最为方便,缺点是:不稳定

package com.appium.zhihu;
import java.util.Set;
import org.openqa.selenium.By;
import io.appium.java_client.MobileBy.ByAccessibilityId;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;

public class HybridTest {
	/**
	 * 如果driver在webview driver下是是不可以使用滑动的;若要使用必须切换context;不可使用关键字自动切换,因为若有多个的情况下不知道切换到那个上了
	 * @param driver
	 */
	public static void  askTest(AndroidDriver<AndroidElement> driver){
		//切换context,安卓原生一个,混合界面一个;
		String current_context=driver.getContext();//获取当前界面的context
		System.out.println("current_context ——》"+current_context);
		//获取所有的context
		Set<String> contexts=driver.getContextHandles();
		for(String context:contexts){
			System.out.println("context——》"+context);
			if(context.contains("WEBVIEW_com.testfan.ask")){
				driver.context(context);//切换
				break;
			}
		}
		//切换后可定位元素,不在当前屏需要滑动下的也可以点中(和html加载有关)
		//driver.findElement(By.xpath("//a[@title='如何实现代码高亮?']")).click();或者使用两种定位方式
		driver.findElement(By.linkText("如何实现代码高亮?")).click();
		driver.findElement(By.id("carousel-recommendation")).click();//通过id定位
		//以下是使用的webdriver的定位方式
		driver.findElement(By.cssSelector("#carousel-recommendation")).click();//通过id属性定位(#)
		driver.findElement(By.cssSelector(".carousel slide")).click();//通过class定位(.)
		//表示通过a标签的href定位
		driver.findElement(By.cssSelector("a[href='http://ask.testfan.cn/question/866']")).click();
		//切换为原生context
		//driver.context("NATIVE_APP");//切换成原生的context即可使用滑动手势等操作
	}
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值