乐趣区

关于软件测试:学会这一招轻松玩转-app-中混合应用自动化测试

前 言
当初的 app 中越来越多的页面通过 H5 来做了,理由很简略,不须要降级 app 就能让用户应用新的性能。这就苦了咱们测试工程师了,混合利用自动化不会玩。明天咱们来聊一聊 app 中混合利用自动化怎么做。
一、环境筹备
appium==1.21.0
JDK 版本 ==1.8
android-sdk==Version 29.0.4-5871666
python == 3.7.9

二、步骤
辨认 app 中是否内嵌 h5
开启 WebView 调试模式
装置 h5 元素定位工具
获取获取所有的 contexts
切换到对应的 contexts
下载对应 WebView 版本驱动程序
在 H5 中进行元素定位和操作
如有须要 h5 操作完之后切回 app

三、步骤详解
第一步:辨认 app 中是否内嵌 h5
手机上开发者选项、关上布局边界,关上被测 app,页面中无布局的就是 h5 内容
应用定位工具:如果元素上 className:android.webkit.WebView 则为 h5 内容
问开发 (不举荐,显得你很不业余)
第二步:开启 WebView 调试模式
Web 端咱们间接按 F12 就能进入调试模式,进行元素定位,app 端是不能够这样操作的,咱们关上 app 内嵌 H5 页面的 WebView 调试模式,能力像在 Web 端一样查看元素,写元素定位表达式
具体形式参考【歪歪老师】的文章:https://www.cnblogs.com/yyoba…
第三步:装置 h5 元素定位工具
下载安装 uc-devtools(下最新版本):https://dev.ucweb.com/downloa…
关上 uc-devtools 工具,只有手机连贯到电脑胜利,uc-devtools 主动连贯你手机
点设置,勾选本地 Devtools Inspector UI 资源

如果 app 页面有 H5 资源,在 Home 页面会自动识别到
app 页面为 h5 页面

uc-devtools 自动识别:

间接点击对应的 inspect,就能够看到相熟的 Web 元素定位页面了

第四步:获取获取所有的 contexts
contexts = driver.contexts
[‘NATIVE_APP’, ‘WEBVIEW_com.lemon.lemonban’]
阐明:NATIVE_APP 为安卓原生、WEBVIEW_com.lemon.lemonban 为 h5
第五步:切换到对应的 contexts
driver.switch_to.context(contexts[1])
这个 WEBVIEW_com.lemon.lemonban 个别不会变,能够写死 driver.switch_to.context(“WEBVIEW_com.lemon.lemonban”)
第六步:下载对应 WebView 版本驱动程序
下载地址 (我用的是 chrome):http://npm.taobao.org/mirrors…
通过定位工具获取 WebView 版本信息

在启动参数减少驱动地位设置 desired_caps[“chromedriverExecutable”]=” 刚下载好的驱动地位 ”

第七步:在 H5 中进行元素定位和操作
Web 中元素定位和操作这里不讲了
第八步:h5 操作完之后切回 app
driver.switch_to.context(‘NATIVE_APP’)

四、演示代码

点柠檬社区 —> 定位 H5 中的注册 —> 点注册
import time
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
desired_caps = {
‘automationName’:’UiAutomator2′,
‘platformName’:’Android’,
‘platformVersion’:’7.1.2′,
‘deviceName’: ‘xiaomi’,
‘appPackage’:’com.lemon.lemonban’,
‘appActivity’:’.activity.MainActivity’,
‘noReset’:’True’,
‘chromedriverExecutable’:r’D:\chromeDriver\6769\chromedriver.exe’
}
driver = webdriver.Remote(command_executor=’http://localhost:4723/wd/hub’, desired_capabilities=desired_caps)

wait = WebDriverWait(driver=driver,timeout=10)
time.sleep(2)

点柠檬社区

loc1=(MobileBy.ANDROID_UIAUTOMATOR,’resourceId(“com.lemon.lemonban:id/category_title”).text(“ 柠檬社区 ”)’)
ele1 =wait.until(EC.visibility_of_element_located(locator=loc1))
time.sleep(2)
ele1.click()
time.sleep(2)

获取所有的 contexts

all_contexts = driver.contexts
print(‘ 所有的 contexts:’,all_contexts)
time.sleep(2)

切换到 html 对应的 context

driver.switch_to.context(“WEBVIEW_com.lemon.lemonban”)
print(‘ 切换胜利 ’)

MobileSwitchTo(driver=driver).context(context_name=”WEBVIEW_com.lemon.lemonban”)

time.sleep(2)

定位 H5 中的注册

loc2=(MobileBy.XPATH,’//a[text()=” 注册 ”]’)
ele2 = wait.until(EC.visibility_of_element_located(locator=loc2))
time.sleep(2)
ele2.click()
time.sleep(20)
评论区说说
明天的小常识学会了吗?
是不是十分的实用呢~
还有什么想理解的就在文末留言吧

退出移动版