当前位置:网站首页>【Appium】测试时遇到手机内嵌H5页面的切换问题
【Appium】测试时遇到手机内嵌H5页面的切换问题
2022-04-23 06:55:00 【BetterFate!】
前言:H5页面简单理解就是在手机内嵌套了一些网页格式的信息,可以让手机的应用看起来更丰富一些。
而当手机内嵌H5页面时,常规的app定位方法就没法使用了,我们需要先切换到H5页面才能进行下一步的定位,那该怎么操作呢,详细如下:
目录
一、确认app中哪个页面使用了H5技术
在测试app前,可以询问开发(开发是肯定清楚的),或者有没有什么说明文档。
本文以有道云笔记-->我的-->有道云协作企业版为例,如下图:
二、配置H5页面对应的chrome驱动
2.1、确认H5页面内置的chrome版本
1、首先在app内打开对应的H5页面,如下图
2、打开chrome浏览器,在地址栏输入命令chrome://inspect/#devices,等待一会,即可获取对应的chrome版本号74.0.3729.186。
2.2、下载相匹配的chrome驱动版本
1、进入appium官网Using Chromedriver - Appium,点击Chromedriver/Chrome compatibility下的“Version Selection(版本选择)”,如下图,看不懂英文版的可将其翻译成中文。
注意:步骤仅针对于版本号高于73的。
2、然后会跳转到版本选择的网页https://chromedriver.chromium.org/downloads/version-selection,同样先把网页翻译成中文。其中有写如何下载对应的驱动版本的步骤,如果看不明白就按照我下面的步骤来,看懂的话可以忽略我下面几步。
3、在第一步中我们已经获取到了我们的chrome版本是74.0.3729.186,删掉最后的小版本然后将其拼接到该网址的后面:https://chromedriver.storage.googleapis.com/LATEST_RELEASE_74.0.3729,(只需要替换红色部分版本号即可,前面是固定的.)
搜索结果如下,就得到了一个chrome驱动对应的版本号74.0.3729.6(当然,实际数字将来可能会有所变化)
4、使用从上一步中检索到的版本号74.0.3729.6来构造用于下载 ChromeDriver 的 URL。构造之后的URL为:https://chromedriver.storage.googleapis.com/index.html?path=74.0.3729.6/ (只需要替换红色部分版本号即可,前面是固定的.)
搜索即可得到chrome驱动的下载链接,如下:
2.3、将chrome驱动放到appium对应目录下
下载上面对应系统的chrome驱动,将解压出来的chromedriver.exe放到appium安装路径下的appium-chromedriver\chromedriver\win路径下,找不到路径的可以直接搜索appium-chromedriver就能找到对应文件了。
我的appium安装路径是:C:\Program Files\Appium Server GUI\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
2.4、注意事项
1、如果您使用来自Dev或Canary频道的Chrome,或者构建自己的自定义版本的Chrome,则可能没有可用的ChromeDriver正式支持它。在这种情况下,请尝试以下操作:
- 首先,使用 Chrome 的主要版本号构建LATEST_RELEASE网址。例如,对于 Chrome 版本 73.0.3683.86,请使用网址“https://chromedriver.storage.googleapis.com/LATEST_RELEASE_73”。尝试从此 URL 下载一个小文件。如果成功,则文件包含要使用的 ChromeDriver 版本。
- 如果上述步骤失败,请将 Chrome 主要版本减少 1,然后重试。例如,对于 Chrome 版本 75.0.3745.4,请使用网址“https://chromedriver.storage.googleapis.com/LATEST_RELEASE_74”下载一个小文件,其中包含要使用的 ChromeDriver 版本。
2、下载的chrome驱动如果没用的话,按上述步骤将版本加1或减1多尝试几个即可,甚至加减2都行,只要能用就行。
三、编写脚本进行H5页面的切换
首先要注意的事项:
1、由于H5页面加载较慢,所以可以在抓元素之前加入时间等待。
2、在H5页面上操作,我们要切换到H5页面,想要回到app继续操作,同样也是要进行切换操作的。
3.1、获取H5页面标签信息
当我们点击到H5页面之后,首先获取当前H5页面的标签信息,代码如下,注意:这里的contexts是有s的。
其中 'NATIVE_APP' 指的是有道云app的标签,'WEBVIEW_com.youdao.note' 指的是H5页面的标签。
# 切换到H5
# 获取相关的页面的标识
time.sleep(5)
page = self.driver.contexts
print(page) # 返回结果为['NATIVE_APP', 'WEBVIEW_com.youdao.note']
3.2、切换到H5页面
获取到标签之后就可以切换到对应的H5页面了,这里可以使用标签名,也可以直接用page[1]以防以后标签名有所改变。代码如下:
# 切换到H5页面
self.driver.switch_to.context('WEBVIEW_com.youdao.note')
# 或者self.driver.switch_to.context(page[1])
3.3、H5页面元素定位
当我们切换到H5页面之后,后续的定位方式就和web浏览器的定位方式一样了,之前我们用chrome://inspect/#devices获取了对应的chrome版本号,在该网站上同样有H5页面对应的网址,直接拷贝该网址,然后在chrome浏览器打开,使用web端的开发工具就可以进行元素定位了。
如下两图:
3.4、退出H5页面返回手机端页面
当我们在H5页面完成测试之后,还需要回到手机端页面进行后续测试的话,有一个快捷返回的方式,就是按手机上的返回键,而返回键对应的keycode值为4。
下面两种方法任选一种,都可以。
# 点击手机返回键,返回手机端页面
self.driver.press_keycode('4')
# self.driver.keyevent('4')
3.5、切换回手机app模式
之后想要在app上定位的话,我们需要从H5模式切换回app模式,在上面已经获取过app的标签了,所以可以直接使用。
# 切换到手机app模式下
self.driver.switch_to.context(page[0])
3.6、完整代码
# 手机app中遇到H5页面如何切换
# 导入Appium类库
from appium.webdriver.webdriver import WebDriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import time
class yd_H5():
def __init__(self):
self.caps = {
'automationName': 'UiAutomator2',
'platformName': 'Android',
'platformVersion': '6.0',
'deviceName': '192.168.23.101:5555',
'appPackage': 'com.youdao.note',
'appActivity': '.activity2.MainActivity'}
self.driver = WebDriver('http://127.0.0.1:4723/wd/hub', self.caps)
self.driver.implicitly_wait(10)
el = WebDriverWait(self.driver, 10).until(
lambda x: x.find_element(By.ID, 'com.android.packageinstaller:id/permission_allow_button'))
if el:
# 点击同意按钮
self.driver.find_element(By.ID, 'com.android.packageinstaller:id/permission_allow_button').click()
def test_H5qy(self):
# 点击'我的'按钮
self.driver.find_elements(By.ID, "com.youdao.note:id/tab_name")[3].click()
time.sleep(1)
# 滚屏操作(向下滚动)
time.sleep(1)
self.driver.swipe(90, 1700, 90, 850)
time.sleep(1)
# 点击有道云企业版按钮
self.driver.find_element(By.ID, 'com.youdao.note:id/youdao_corp_enterprise').click()
# 切换到H5
# 获取相关的页面的标识
time.sleep(5)
page = self.driver.contexts
print(page) # 返回结果为['NATIVE_APP', 'WEBVIEW_com.youdao.note']
# 切换到H5页面
self.driver.switch_to.context('WEBVIEW_com.youdao.note') # 也可以写page[1]使其参数化
# 所有的自动化测试转入web端
# 点击立即使用
self.driver.find_element(By.XPATH, '//*[@id="banner-one"]/div/a[2]').click()
# 点击手机返回键,返回手机端页面
time.sleep(1)
self.driver.press_keycode('4')
# self.driver.keyevent('4')
# 切换到手机app模式下
self.driver.switch_to.context(page[0])
# 之后就是正常在app内抓元素了
if __name__ == '__main__':
h5 = yd_H5()
h5.test_H5qy()
版权声明
本文为[BetterFate!]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_42297382/article/details/124334167
边栏推荐
- 数据库之MySQL——基本常用查询命令
- 【问题解决】VS2019解决编译生成的exe文件打不开的情况
- 惨了,搞坏了领导的机密文件,吐血分享备份文件的代码技巧
- 三星,再次“西征”
- 以下程序实现从字符串str中删除第i个字符开始的连续n个字
- Reverse linked list exercise
- Link to some good tutorials or notes about network security and record them
- Three minutes to teach you to use Houdini fluid > > to solve particle fluid droplets
- Go语学习笔记 - Slice、Map | 从零开始Go语言
- Canvas learning Chapter 1
猜你喜欢
随机推荐
Interview learning route
Cloud computing skills competition -- the first part of openstack private cloud environment
Go语学习笔记 - 异常处理 | 从零开始Go语言
Planification du mouvement du manipulateur dans l'assemblage 3c
一个没啥L用,但可以装X的IDEA插件
三星,再次“西征”
Flatten arrays
Mobile terminal layout (3D conversion, animation)
Intranet penetration series: icmptunnel of Intranet tunnel (by master dhavalkapil)
Intranet security attack and defense: a practical guide to penetration testing (6): domain controller security
求3个字符串(每串不超过20个字符)中的最大者。
几种智能机器人室内定位方法对比
Alibaba sentinel learning QA
Redis--为什么字符串emstr的字符串长度是44字节上限?
Three minutes to teach you to use Houdini fluid > > to solve particle fluid droplets
Chapter IV intangible assets
Hump naming object
Internal network security attack and defense: a practical guide to penetration testing (8): Authority maintenance analysis and defense
RAID0和RAID5的创建和模拟RAID5工作原理
BUUCTF MISC刷题