Appium定位混合应用WebView
2019-08-21 本文已影响0人
test小星星
前言
混合应用是一种常见的app类型,主要是将web页面嵌套到app中
测试准备
操作步骤
- 手机(模拟器)与电脑连接,开启USB调试模式,通过adb devices可查看到此设备。
adb connect 127.0.0.1:7555
-
电脑端、移动端安装chrome浏览器。(尽量保证移动端chrome版本与PC端一致)根据对应的Chrome浏览器版本安装对应的Chrome driver。
-
将下载的chromediver放到appium路径中
- 如果是用appium server启动的服务放到如下路径
C:\Users\xxx\AppData\Roaming\npm\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
- 如果是用appium-desktop启动的服务放到如下路径
C:\Users\xxx\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
-
打开dr.fone app 进入web页面。(如图所示)
image.png -
pc端打开Chrome浏览器输入:chrome://inspect/#devices 如图所示
devices
如果在 chrome://inspect/#devices 地址中,没有显示对应的webview,有可能未开启调试模式。
开启方式
- 在app中配置如下代码(在WebView类中调用静态方法setWebContentsDebuggingEnabled):
if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
注:此步骤,一般需要App开发人员开启。
- 有些手机需要root权限
- android 4.4+
- 执行脚本
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 如何查找元素
- 使用原来(uiautomator)查找原生app的方式来查找元素
- 把webview的链接提取出来,通过pc的chrome打开链接,然后打开开发者工具找到元素使用selenium的方式定位
- 通过chrome://inspect/#devices方式查找元素(注意此方法需要梯子,否则无法打开)
devices
inspect