jck28-桔子-学习笔记-app hybrid-->webview

  1. app开发模式分为分为:
  • native原生开发的组件
  • hybrid混合开发webview的组件
  1. hybrid混合开发的组件
  • webiview是native原生自带的一个组件,它可以嵌入/渲染一个web(或者直接一个外部html), web中的页面元素类型很多,属性也很多,嵌入的是web/h5/css开发的元素;

  • 用常用的页面元素捕捉工具,只能用原生的方式解读页面元素,web的很多不同的组件类型,和复杂的属性,都会丢失,只能解读为native的元素,比较简单,会造成属性丢失,看上去就那么几种类型,都相似,很难区分他们。

  • 所以,针对webview中的元素我们用Web的方式去获取页面元素才能完整的解读他们:

    • chrome://inspect
    • [推荐] edge://inspect
    • firefox about:debugging

      Andriod 6的webview 是自动开启的,打开并进入带有webview/hybrid的APP页面,然后利用工具进行页面元素的定位:
  1. hybrid混合模式的自动化
  • webview下的h5元素用的chrome框架,我们用chromeDriver可以解析相应的组件

  • 在自动化启动项中配置chromeDriver
    desiredCapabilities.setCapability(“chromedriverExecutableDir”, “/Users/gaigai/Documents/hogwarts/chromedriver/95.0.4638.69”);
    desiredCapabilities.setCapability(“chromedriverChromeMappingFile”, “/Users/gaigai/Documents/hogwarts/mapping.json”);
    desiredCapabilities.setCapability(“showChromedriverLog”, true);

  • app中webview的chromedriver是哪个版本,可以用inspect工具中看出来,你需要下载相应的driver版本


    国内的chromedriver下载地址:CNPM Binaries Mirror

  • appium可以在获取native原生页面元素时切换至UIautomator框架获取元素, 在webiview元素中切换到chromeDriver获取页面元素
    获得当前的上下文 driver.getContextHandles();
    切换上下文 driver.context(“WEBVIEW_XXXX”)

  • 当你的edge://inspect里面能看到多个webview的时候,类似于你的浏览器开启了多个Tab页面,用windowsHandles切换,不切换你就拿不到相应页面的元素


    如图,我有两个window
    driver.switchTo().window(windowHandles.toArray()[1].toString());
    driver.findElement(By.xpath(“//input[@id=‘phone-number’]”)).click();

note: 不同于native和webview切换的contextHandle