Appium定位混合应用WebView

2019-08-21  本文已影响0人  test小星星

前言

混合应用是一种常见的app类型,主要是将web页面嵌套到app中

测试准备


操作步骤

  1. 手机(模拟器)与电脑连接,开启USB调试模式,通过adb devices可查看到此设备。
adb connect 127.0.0.1:7555
  1. 电脑端、移动端安装chrome浏览器。(尽量保证移动端chrome版本与PC端一致)根据对应的Chrome浏览器版本安装对应的Chrome driver。

  2. 将下载的chromediver放到appium路径中

C:\Users\xxx\AppData\Roaming\npm\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
C:\Users\xxx\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
  1. 打开dr.fone app 进入web页面。(如图所示)


    image.png
  2. pc端打开Chrome浏览器输入:chrome://inspect/#devices 如图所示

    devices

如果在 chrome://inspect/#devices 地址中,没有显示对应的webview,有可能未开启调试模式。

开启方式
if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {  
 WebView.setWebContentsDebuggingEnabled(true);

注:此步骤,一般需要App开发人员开启。

  1. 执行脚本
from time import sleep

from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait


caps = {}
caps["platformName"] = "android"
caps["deviceName"] = "mumu"
caps["appPackage"] = "com.wondershare.drfone"
caps["appActivity"] = "com.wondershare.drfone.ui.activity.WelcomeActivity"
caps["autoGrantPermissions"] = True

driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
driver.implicitly_wait(15)


# 点击BackupBtn
driver.find_element_by_id('com.wondershare.drfone:id/btnBackup').click()

WebDriverWait(driver,8).until(lambda x:x.find_element_by_id('com.wondershare.drfone:id/btnRecoverData'))
# 点击NextBtn
driver.find_element_by_id('com.wondershare.drfone:id/btnRecoverData').click()

#等待webview页面显示
WebDriverWait(driver,20).until(lambda x:x.find_element_by_class_name('android.webkit.WebView'))

# 获取所有上下文
contexts=driver.contexts
print(contexts)

sleep(10)
# 切换上下文,进入webview页面
driver.switch_to.context('WEBVIEW_com.wondershare.drfone')
# 输入邮箱地址
driver.find_element_by_id('email').send_keys('shuqing@wondershare.cn')
# 点击sendBtn
driver.find_element_by_class_name('btn_send').click()

#切换上下文 (回到app原生页面)
driver.switch_to.context('NATIVE_APP')
# 点击返回
driver.find_element_by_class_name('android.widget.ImageButton').click()

补充 WebView 如何查找元素

  1. 使用原来(uiautomator)查找原生app的方式来查找元素
  2. 把webview的链接提取出来,通过pc的chrome打开链接,然后打开开发者工具找到元素使用selenium的方式定位
  3. 通过chrome://inspect/#devices方式查找元素(注意此方法需要梯子,否则无法打开)
    devices
    inspect
上一篇下一篇

猜你喜欢

热点阅读