混合App WebView自动化测试

6 篇文章 1 订阅
3 篇文章 1 订阅

 大家从头看完配置,不一定你的问题在webview配置,有可能出现在了驱动,还有一个重要的点,手机不需要下载谷歌浏览器,只是需要配置appium的chromedriver驱动版本和Android System WebView的版本一致就可以(网上有很多案例都说需要安装谷歌浏览器,亲测无效会报错误:

io.appium.java_client.NoSuchContextException: An unknown server-side error occurred while processing the command. Original error:

混合(hybrid)和原生(native)App

什么是混合app,其实这个不言而喻,我们的app正常来说应该都是原生(native)的,但是实际工作中却不是,反正种种原因我们的app会有native的而且中间还会有H5页面,这其实就是我们常说的混合,当然还有一种就是纯H5的,但是这里我们不做过多的讲解。

WebView元素定位工具

  • 使用driver.page_source方法,将获取到的页面内容写入到一个html文件中,然后使用浏览器打开html文件,使用F12调试用具进行元素定位(代码层面)
  • chrome浏览器自带的调试工具 Developer Tools,在chrome浏览器中输入:chrome://inspect#devices,该工具需要访问国外的网站,因此需要翻墙
  • 使用UC开发者调试工具,需要提前安装,无需翻墙(工具:UC-devtools)官网地址:https://dev.ucweb.com/docs/pwa/docs-zh/xy3whu

 建议大家使用UC-devtools,去官网下载好之后需要简单设置下就可以使用;使用的时候需要手机使用 usb 链接手机;在Home页面查看

 准备工作

 第一步打开手机设置找到应用管理

这个是国内chromedriver驱动下载地址:http://npm.taobao.org/mirrors/chromedriver/

跟据手机应用管理设置里面获取到的版本号下载对应的驱动,这里示例的版本号是(79.0.3945)对应的驱动如下图:

点击下载压缩包如下:

 下载下来的压缩包解压到自定义的文件目录下,没有必要去更换appium自带的chromedriver驱动;(记住自己下载的驱动目录只,之后需要配置);

 Java appium webview 自动化测试配置

 话不多说直接上代码:

/**
 * @Author HLY
 * @Create 2020-03-23 17:41
 */
public class TTest {
    
    AndroidDriver driver;

    @Before
    public void befor(){
            DesiredCapabilities capabilities = new DesiredCapabilities();
            //appium的版本
            capabilities.setCapability(MobileCapabilityType.APPIUM_VERSION, "v1.8.1");
            //android系统的版本
            capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "android_version_xx");
            //系统
            capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
            //驱动
            capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");//UiAutomator1和UiAutomator2使用区别在于版本限制,V1.14.0以上的版本建议使用UiAutomator1

            capabilities.setCapability(MobileCapabilityType.UDID, "deviceName_xx");
            //设备名称 模拟器名称
            capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "deviceName_xx");
            //capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
            //设置app的包名
            capabilities.setCapability("appPackage", "com.xx.xx");
            //设置app的启动activity
            capabilities.setCapability("appActivity", ".xxActivity");
            //capabilities.setCapability("newCommandTimeout", 2000);x
            //此处的地址是appium中的host地址,可以自己修改,只要与appium对应就可以
            capabilities.setCapability("noReset", true);
            //支持中文输入
            capabilities.setCapability("unicodeKeyboard", true);
            //重置输入法到原有状态
            capabilities.setCapability("resetKeyboard", true);
            //设置你下在的 chromedriver驱动路径,路径只写到ChromeDriver.exe的上层目录
            capabilities.setCapability("chromedriverExecutableDir","D:\\xx\\ChromeDriver\\chromedriver_win79.0.3945.36");
        try {
            this.driver = new AndroidDriver<AndroidElement>(new URL("http://127.0.0.1: 4723/wd/hub"), capabilities);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        TouchAction touchAction =new TouchAction(driver);
    }

    /**
     * @throws InterruptedException
     */
    @Test
    public void test() throws InterruptedException, IOException {
        //TODO 你的原生app自动化逻辑
        ...
        ...
        ...
        //TODO 切换到 webview 前提条件是当前页面必须是webview
        //这里才会获取到上下文呢信息,
        Set<String> contextNames = driver.getContextHandles();
        for (String contextName : contextNames) {
            System.out.println(contextName); //prints out something like NATIVE_APP \n WEBVIEW_1
        }
        //WebDriver webDriver = driver.switchTo().window((String) contextNames.toArray()[1]);
        driver.context((String) contextNames.toArray()[1]);// set context to WEBVIEW_1
        driver.findElement(By.xpath("//*[@id=\"btn\"]")).click();
        Thread.sleep(10000);
        //切换回原生
        driver.context((String) contextNames.toArray()[0]);
        System.out.println("WebView自动化测试完成");
    }

    @After
    public void after(){
        driver.quit();
    }
}

还要启动appium 服务,这里就可以执行用例,亲测有效,有不懂的小伙伴可以留言或者私信,本人看到后会第一时间回复大家

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

멋진

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值