全网最具体的Mac下搭建Appium情况文档
appium服务端的版本分为下令行版、桌面版,两者有些区别,两者都要安装01 appium ios自动化情况搭建
起首必须有mac电脑,在app store中搜刮xcode并安装,安装完成后肯定记得打开一次,会自动安装xcode的的一些工具
以下步调均是在mac电脑终端下执行
[*] 安装brew
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
[*] 安装libimobiledevice
brew install libimobiledevice --HEAD
有大概会报错 SSL certificate problem: certificate has expired,那么就执行如下指令后再次执行上述下令
git config --global http.sslVerify false
[*] 安装node
brew install node
[*] 安装npm
brew install npm
[*] 安装carthage
brew install carthage
[*] 安装ios-deploy
npm install ios-deploy
[*] 安装appium
npm install appium
[*] 安装appium-doctor
npm install appium-doctor
[*] 检查appium ios情况
appium-doctor --ios
执行效果中没有error即可
[*] 启动appium
appium
https://i-blog.csdnimg.cn/blog_migrate/b2e1cb2158483492ce5426ffd4dd2c2d.png
02 appium desktop版本安装
下载地址:
https://github.com/appium/appium-desktop/releases/tag/v1.21.0
https://i-blog.csdnimg.cn/blog_migrate/1cc84ec54a00fece3ee1697fe10af4a2.png
03 webdriveragent编译
如果是ios模拟器,那么webdriveragent无需处理
[*] 真机下webdriveragent编译
appium下令行版本的webdriveragent源码路径
/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent
进入上述目录,双击WebDriverAgent.xcodeproj文件
先连接真机
1、xcode选择真机
图中红框两个地方都要举行选择
https://i-blog.csdnimg.cn/blog_migrate/79401f88be6b5dbc97629a396bacfb15.png
2、修改项目的bundleid
bundleid必须包管唯一,否则署名时会报错
图中红框框中的TARGETS都要举行修改
https://i-blog.csdnimg.cn/blog_migrate/cfaa8de6799d94fec850c8bf5fd74658.png
以WebDriverAgentRunner这个TARGETS为例,修改bundleid
https://i-blog.csdnimg.cn/blog_migrate/2ea8ad1dfb5c3307076a2b4b0c56840d.png
其他的TARGETS做相同操作
3、署名TARGETS
针对第2步中框中的每个TARGETS做署名操作,以WebDriverAgentRunner这个TARGETS为例
https://i-blog.csdnimg.cn/blog_migrate/af9db30c500613f5625de2bf38a47bc0.png
4、执行项目测试
执行webdriveragent的测试会在真机上安装一个WebDriverAgentRunner的app,并且启动他,在手机上启动一个基于8100的http服务,该服务是appium举行操作的必备条件
先选择测试文件,执行测试
https://i-blog.csdnimg.cn/blog_migrate/8df5bc562c5cc4fe99df19c42b67315c.png
第一次执行大概会报如下错误
https://i-blog.csdnimg.cn/blog_migrate/5043f024212f78cedd65651ced9c7967.png
那么进入手机设置-->通用-->装备管理,信任你的applie id即可,然后再重新执行测试,并且打开日记检察
https://i-blog.csdnimg.cn/blog_migrate/2e04e957eef86211b29638ef688cbce7.png
日记中没有报错,并且出现图中红框的地址,说明WebDriverAgentRunner 这个app就安装到了手机上并且启动了服务
然后停止测试,点击xcode的停止,至此,wda的app就已经安装在待测手机上了
04 ios元素信息检察
1、以豆瓣app为例,因此在真机上先安装豆瓣app
由于参数中必要用得手机干系信息及豆瓣app的bundle_id,因此我们先获取这些信息,在终端下执行如下下令
# 获取当前连接的装备信息
ios-deploy -c
https://i-blog.csdnimg.cn/blog_migrate/89f879e0e09ca48a6ddfb712277a124c.png
此中00008101-001038A23AC0001E 是装备的udid
# 获取当前手机已安装的所有app的bundle_id,当然也可以找本身公司的开发问
ios-deploy --id 00008101-001038A23AC0001E --list_bundle_id
然后在效果中找到豆瓣app的bundle_id为com.douban.frodo
2、ios app的元素信息检察必须依赖于appium desktop版本,因此必须先按照第三步的步调针对appium desktop版本下的webdriveragent做编译,路径如下:
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent
编译完成并安装wda app到真机上后,打开appium desktop,启动server,在inspect界面添加如下参数并保存
[*] platformName: ios
[*] deviceName: iphone 12
值就是第一步中检察手机信息时看到的装备名称
[*] platformVersion: 14.1
值就是第一步中检察手机信息时看到的装备的ios系统版本
[*] udid: 00008101-001038A23AC0001E
值就是第一步中检察手机信息时看到的装备的udid
[*] bundleId: com.douban.frodo
值就是第一步中得到的豆瓣app的bundle_id
[*] automationName: XCuiTest
[*] usePrebuildWDA: true
设置好以后,点击start session
https://i-blog.csdnimg.cn/blog_migrate/e27fd9b487653be3ee6238f2844d1540.png
稍等半晌,会出现inspect调试界面
https://i-blog.csdnimg.cn/blog_migrate/874a2cf383dce3445f43f616d05543a3.png
05 appium在ios的工作原理
https://i-blog.csdnimg.cn/blog_migrate/f42161d9c415af8e439ae661be62d686.png
06 appium ios服务参数
[*] android和ios公共参数
Capability
Description
Values
automationName
使用的自动化引擎
1.默认是Appium(Android下是uiautomator2,ios下是uiautomation)
2.安卓下还可以指定uiautomator1,ios下还可以指定为XCUITest(只能是这个)
platformName
使用的手机操作系统
iOS, Android, or FirefoxOS
platformVersion
手机操作系统的版本
e.g., 7.1, 4.4
deviceName
手机装备的名字或者模拟器名字(固然是必须项,但在安卓平台上这个值写啥都行,不影响脚本)
iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, 等等.... 在 iOS 上,使用 Instruments 的 instruments -s devices 下令可返回一个有用的装备的列表
app
App(.ipa/.apk)安装文件所在路径,本地路径或者远程路径,或者是一个包罗app安装文件的.zip文件。Appium将先尝试安装应用到装备上。注意,如果在安卓上你指定了应用的appPackage和appActivity那么app这个参数就不是必须的。这个参数与browserName辩论
/abs/path/to/my.apk orhttp://myapp.com/app.ipa
browserName
手机web自动化的浏览器的名字(android下使用Chrome浏览器)。如果是做一个app的自动化这个参数值为空(但是实际上这个参数直接不写就可以了)
'Safari' for iOS and 'Chrome', 'Chromium', or 'Browser' for Android
newCommandTimeout
等候新下令超时时间(Session超时时间),单位是秒,默认是60秒。当appium服务在指定的超时时间内未接收到任何来自客户端的指令,appium服务端与客户端会主动断开链接
e.g. 60
language
设置模拟器语言
e.g. fr
locale
设置模拟器的地区位置
e.g. fr_CA
udid
链接物理指定装备的唯一标识
e.g. 1ae203187fc012g1. 安卓上就是通过adb devices看到的装备名称2. ios上可以用个idevice_id -l去检察装备的udid
orientation
设置模拟器的方向
LANDSCAPE(横屏)or PORTRAIT(竖屏)
autoWebview
自动转换到 WebView默认是false
true, false
noReset
在当前session开始之前不重置应用的状态(不重置应用数据的意思)。默认是false,表示会重置
true, false
fullReset
(iOS) 删除整个假造目录来重置应用数据。(Android) 通过卸载app来的方式重置应用数据(在当前session断开之后)。默认是false
true, false
enablePerformanceLogging
只支持web和webview在android和ios的safari上,性能日记,默认是false
true, false
printPageSourceOnFindFailure
查找元素失败时打印当前界面的page source默认是false
true, false
clearSystemFiles
测试结束后删除所有天生的文件默认是fasle
true, false
[*] ios特有参数
Capability
Description
Values
calendarFormat
(Sim-only) 为iOS的模拟器设置日历格式
e.g. gregorian(公历)
bundleId
被测应用的 bundle ID 。用于在真实装备中启动测试,也用于使用其他必要 bundle ID 的关键字启动测试。在使用 bundle ID 在真实装备上执行测试时,你可以不提供 app关键字,但你必须提供 udid 。
e.g. io.appium.TestApp
launchTimeout
以毫秒为单位,在 Appium 运行失败之前设置一个等候 instruments 的时间
e.g. 20000
locationServicesEnabled
(Sim-only) 逼迫打开或关闭定位服务。默认值是保持当前模拟器的设定
true or false
locationServicesAuthorized
(Sim-only) 通过修改 plist 文件设定是否答应应用使用定位服务,从而避免定位服务的告诫出现。默认值是保持当前模拟器的设定。请注意在使用这个关键字时,必须是bundleId同时使用
true or false
autoAcceptAlerts
所有ios的提醒框 (如 位置、接洽人、相册) 出现时,自动选择接受( Accept )。默认值 false
true or false
autoDismissAlerts
所有ios的提醒框 (如 位置、接洽人、相册) 出现时,自动选择拒绝( Dismiss )。默认值 false
true or false
nativeInstrumentsLib
使用原生 intruments 库 (即关闭 instruments-without-delay )
true or false
nativeWebTap
(Sim-only) 在Safari中答应"真实的",非基于 javascript 的 web 点击 (tap) 。默认值:false。注意:取决于 viewport 大小/比例, 点击操作不肯定能精确地点中对应的元素。
true or false
safariInitialUrl
(Sim-only) (>= 8.1) 初始化 safari 的时使用的地址。默认是一个本地的欢迎页面
e.g.https://www.github.com
safariAllowPopups
(Sim-only) 答应 javascript 在 Safari 中创建新窗口。默认保持模拟器当前设置。
true or false
safariIgnoreFraudWarning
(Sim-only) 阻止 Safari 显示此网站大概存在风险的告诫。默认保持浏览器当前设置。
true or false
safariOpenLinksInBackground
(Sim-only) Safari 是否答应链接在新窗口打开。默认保持浏览器当前设置。
true or false
keepKeyChains
(Sim-only) 当 Appium 会话开始/结束时是否保存存放密码存放记载 (keychains) (库(Library)/钥匙串(Keychains))
true or false
localizableStringsDir
从那里查找本地化字符串。默认值 en.lproj
en.lproj
processArguments
通过 instruments 传递到 AUT 的参数
e.g., -myflag
interKeyDelay
以毫秒为单位,按下每一个按键之间的延迟时间
e.g., 100
showIOSLog
是否在 Appium 的日记中显示装备的日记。默认值 false
true or false
sendKeyStrategy
输入笔墨到笔墨框的策略。模拟器默认值:oneByOne (一个接着一个) 。真实装备默认值:grouped (分组输入)
oneByOne, grouped orsetValue
screenshotWaitTimeout
以秒为单位,天生屏幕截图的最长等候时间。默认值:10
e.g., 5
waitForAppScript
用于判断 "应用是否被启动” 的 iOS 自动化脚本代码。默认情况下系统等候直到页面内容非空。效果必须是布尔范例。
e.g. true;,target.elements().length > 0;, $.delay(5000); true;
appName
在测试时显示应用的名字.在ios 9+下自动化的时候
e.g., UICatalog
customSSLCert
(Sim/Emu-only) 添加一个SSL证书给模拟器
e.g. -----BEGIN CERTIFICATE-----MIIFWjCCBEKg...-----END CERTIFICATE-----
[*] WDA参数
Capability
Description
Values
noReset
测试后不要销毁或关闭模拟器。开始测试运行在任何模拟器运行,或装备。默认false
true, false
processArguments
进程参数和情况发送到WebDriverAgent服务器的情况。
{ args: ["a", "b", "c"] , env: { "a": "b", "c": "d" } } 要么'{"args": ["a", "b", "c"], "env": { "a": "b", "c": "d" }}'
wdaLocalPort
用来转发mac电脑上到装备上与wda通讯的端口。默认值与WDA在装备上使用的端口号相同。
比方, 8100
showXcodeLog
是否显示用于运行测试的Xcode下令的输出日记。如果是true,在启动时会有很多额外的日记记载。默认为false
比方, true
iosInstallPause
在安装应用程序和在装备上启动WebDriverAgent之间暂停的时间(以毫秒为单位)。特殊用于较大的应用程序时。默认为0
比方, 8000
xcodeOrgId
Apple开发者团队标识符字符串 必须配合使用xcodeSigningId才气生效。
比方, JWL241K123
xcodeSigningId
表示署名证书的字符串。必须与xcodeOrgId一起使用。这通常只是iPhone Developer,以是默认(如果不包括)是iPhone Developer
比方, iPhone Developer
xcodeConfigFile
一个可选的Xcode配置文件的完整路径,指定在真实装备上运行WebDriverAgent的代码署名身份和团队。
比方,/path/to/myconfig.xcconfig
updatedWDABundleId
在真实装备上构建和启动之前,必须将bundleID更新到WDA。该bundleID必须是有用的。
比方,io.appium.WebDriverAgentRunner
keychainPath
从系统钥匙串导出的私人开发密钥的完整路径。与keychainPassword在真实装备上测试时一起使用。
比方,/path/to/MyPrivateKey.p12
keychainPassword
解锁钥匙串的密码keychainPath。
比方, super awesome password
scaleFactor
模拟器比例。如果模拟装备的默认分辨率大于实际的显示分辨率,这很有用。以是你可以缩放模拟器来检察整个装备的屏幕而不用滚动。
运行Xcode SDK 8和更旧版本的模拟器的可接受值是:'1.0', '0.75', '0.5', '0.33' and '0.25',此中'1.0'表示100%的比例。对于运行Xcode SDK 9和更高版本的模拟器,该值可以是任何有用的正浮点数。该参数必须是字符串范例。
usePrebuiltWDA
跳过运行WDA应用程序的构建阶段。只适用于Xcode 8+。默认为false。
比方, true
preventWDAAttachments
将只读权限设置为Xcode DerivedData中WebDriverAgent根的附件子文件夹。这是防止XCTest框架创建大量不必要的屏幕截图和日记所必须的,在使用Apple提供的编程接口的XCTest @ Xcode9之前,这是不大概关闭的。
将参数设置为true将文件夹的POSIX权限设置为555,false并将其重置为755。false默认情况下,如果Xcode SDK是在版本9或更高版本,否则true
webDriverAgentUrl
如果提供,Appium将连接到此URL上的现有WebDriverAgent实例,而不是启动一个新的实例。
比方, http://localhost:8100
useNewWDA
如果true逼迫卸载装备上任何现有的WebDriverAgent应用程序。如果要为每个会话应用WebDriverAgent的差别启动选项,请将其设置为true。固然,只包管在模拟器上工作稳定。真正的装备必要WebDriverAgent客户端运行尽大概长的时间,而不必要重新安装/重新启动,以避免像https://github.com/facebook/WebDriverAgent/issues/507这样的问题。该false值(驱动程序版本2.35.0以后的默认行为)将尝试检测当前正在运行的WDA侦听器,并在大概的情况下重用它,猛烈建议用于真实装备测试并加快多个套件一般的测试。将在默认URL(http:// localhost:8100)上触发新的WDA会话)如果WDA不在监听并且webDriverAgentUrl功能没有设置。功能的负/未设值useNewWDA在xcuitest驱动程序版本2.35.0之前不起作用。
比方, true
wdaLaunchTimeout
时间,以毫秒为单位,等候WebDriverAgent是可以ping通的。默认为60000ms。
比方, 30000
wdaConnectionTimeout
超时,以毫秒为单位,等候WebDriverAgent的响应。默认为240000ms。
比方, 1000
resetOnSessionStartOnly
是否在测试会话结束(false)或不(true)时执行重置。保持此变量设置为true并且Simulator运行(自版本1.6.4起的默认行为)大概会显着收缩测试会话初始化的连续时间。
true或false。默认为true
commandTimeouts
WDA后端下令执行的自定义超时(以毫秒为单位)。如果WDA后端不测冻结或必要太多时间来失败并阻止自动化测试执行,这大概会很有用。该值预期为字符串范例,并且可以包罗最大毫秒数,以便在逼迫终止会话之前等候每个WDA下令的执行或有用的JSON字符串,此中键是内部的Appium下令名称(可以在日记中找到这些下令,查找“执行下令'command_name'”记载),值是以毫秒为单位的超时值。您还可以设置“默认”键,为未明确摆列为JSON密钥的所有其他下令分配超时值。
'120000', '{"findElement": 40000, "findElements": 40000, "setValue": 20000, "default": 120000}'
wdaStartupRetries
尝试构建WebDriverAgent到装备上的次数。默认为2。
比方, 4
wdaStartupRetryInterval
时间,以毫秒为单位,尝试构建和启动WebDriverAgent。默认为10000ms。
比方, 20000
connectHardwareKeyboard
将此选项设置为true在Simulator中启用硬件键盘。它被设置为false默认,因为这有助于办理一些XCTest错误。
true 要么 false
maxTypingFrequency
用于键入和清除的点击最大频率。如果您的测试由于输入错误而失败,您大概必要调解。默认为每分钟60次击键。
比方, 30
simpleIsVisibleCheck
使用本地方法来确定元素的可见性。在某些情况下,这必要很长时间。设置此功能false将使系统使用元素的位置和大小,以确保它们在屏幕上可见。但是,这大概会在某些情况下导致错误效果。默认为false,除了默认的iOS 9.3是 true。
比方true,false
useCarthageSsl
使用SSL下载WebDriverAgent的依赖关系。默认为false
比方, true
shouldUseSingletonTestManager
在WebDriverAgent中使用默认代理举行测试管理。设置此false偶然帮助套接字挂断问题。默认为true。
比方, false
startIWDP
如果您想要自动启动ios_webkit_debug代理服务器来访问iOS上的webview,请将其设置为true。参数只适用于真实装备的装备自动化。默认为false。
比方, true
calendarAccessAuthorized
将其设置为true,如果要启用给定bundleId在IOS模拟器日历访问。设置为false,如果你想禁用IOS模拟器的日历访问与给定的bundleId。如果未设置,日历授权状态将不会被设置。
比方, true
isHeadless
如果在模拟器上运行自动化测试,并且不必要显示装备显示,则将此功能设置为true。这只是Xcode9以后的效果,只能用于模拟器。所有正在运行的模拟器用户界面的实例将自动终止,如果无头测试开始。false是默认值。
比方, true
webkitDebugProxyPort
用于与ios-webkit-debug-proxy举行通讯的本地端口号。只与真实装备有关。默认值便是27753。
比方 20000
useXctestrunFile
使用Xctestrun文件启动WDA。它会搜刮这样的文件bootstrapPath。文件的预期名称是WebDriverAgentRunner_iphoneos-arm64.xctestrun真实的装备和WebDriverAgentRunner_iphonesimulator-x86_64.xctestrun模拟器。我们可以做build-for-testing的WebDriverAgent项目模拟器和真正的装备,然后你会看到类似这样的产物文件夹,你必要在复制该文件夹的内容bootstrapPath位置。因为,这个功能盼望你已经建立了WDA项目,它既不检查你是否有必要的依赖建立,WDA也不是试图建立项目。默认为false
比方, true
absoluteWebLocations
这个功能将指导Get Element Location在webviews中使用的下令返回相对于页面原点的坐标,而不是相对于当前的滚动偏移量。这个功能在webview之外没有任何效果。默认false。
比方, true
simulatorWindowCenter
答应显式设置Xcode9 + SDK的Simulator窗口中心的坐标。此功能只有在Simulator窗口尚未在当前会话中打开时才起作用。
比方,{-100.0,100.0}或者{500,500},不答应有空格
useJSONSource
从WDA获取JSON源并在Appium服务器上剖析XML。这可以更快,特殊是在大型装备上。默认为false。
比方, true
07 元素定位
定位方式
原生app界面对应属性
H5界面对应属性
By.ID
x
id
By.XPATH
//XCUIElementTypeButton
//div
By.NAME
×
name
MobileBy.MobileBy.IOS_PREDICATE
label == "登录" AND name == "登录" AND type == "XCUIElementTypeButton"
×
MobileBy.IOS_CLASS_CHAIN
https://i-blog.csdnimg.cn/blog_migrate/d5ca270793d84a03b03e8ba573424dad.png
x
MobileBy.ACCESSIBILITY_ID
name
×
By.TAG_NAME
×
标署名
By.LINK_TEXT
×
a标签的笔墨
By.PARTIAL_LINK_TEXT
×
a标签的笔墨
By.CSS_SELECTOR
×
css表达式
By.CLASS_NAME
type
class
MobileBy.MobileBy.IOS_PREDICATE 定位补充:
MobileBy.MobileBy.IOS_PREDICATE 定位方式重要是以元素属性举行定位,可以多个可以含糊匹配等等
属性便是=:
driver.find_element(MobileBy.IOS_PREDICATE,'name = "书影音"') 属性含糊匹配LIKE:
driver.find_element(MobileBy.IOS_PREDICATE,'name LIKE "*书影音"') 属性包罗CONTAINS:
driver.find_element(MobileBy.IOS_PREDICATE,'name CONTAINS "影"') 属性值开头匹配BEGINSWITH:
driver.find_element(MobileBy.IOS_PREDICATE,'name BEGINSWITH "书影"') 属性值结尾匹配ENDSWITH:
driver.find_element(MobileBy.IOS_PREDICATE,'name ENDSWITH "音"').click() 多属性同时匹配AND:
driver.find_element(MobileBy.IOS_PREDICATE,'name = "书影音" AND label="书影音"') 多属性或者匹配OR:
driver.find_element(MobileBy.IOS_PREDICATE,'name = "书影音" OR label="书影音"') 比较运算符>、<、==、>=、<=、!=:
[*] driver.find_element(MobileBy.IOS_PREDICATE,'value>100')
[*]
[*] driver.find_element(MobileBy.IOS_PREDICATE,'value<100')
[*]
[*] driver.find_element(MobileBy.IOS_PREDICATE,'value!=100')
正则匹配MATCHES:
driver.find_element(MobileBy.IOS_PREDICATE,'name MATCHES "正则表达式"') MobileBy.IOS_CLASS_CHAIN 定位补充:
MobileBy.IOS_CLASS_CHAIN定位方式和xpath极其相似,也是按照元素层级和元素属性举行定位的
[*] #查找type属性为XCUIElementTypeSecureTextField并且value为请输入密码的元素
[*]
[*] driver.find_element(MobileBy.IOS_CLASS_CHAIN,'**/XCUIElementTypeSecureTextField[`value== "请输入密码"`]')
[*]
[*] #查找type属性为XCUIElementTypeSecureTextField的第一个
[*]
[*] driver.find_element(MobileBy.IOS_CLASS_CHAIN,'**/XCUIElementTypeSecureTextField')
08 driver常用干系api
[*] 获取屏幕分辨率
[*] driver.get_window_size()['width'] #获取屏幕的宽
[*]
[*] driver.get_window_size()['height'] #获取屏幕的高
[*] 整屏滑动
[*] # 起始点坐标200,700 结束点坐标200,100 连续时间500毫秒
[*]
[*] driver.swipe(200,700,200,100,500)
[*] 启动激活第三方app
[*] # 启动已安装的某个应用,参数第一个是应用的
[*]
[*] bundleiddriver.activate_app('com.tencent.xin')
[*] 装备横竖屏干系操作
[*] #获取装备横竖屏方向,PORTRAIT表示竖屏,LANDSCAPE表示横屏
[*]
[*] driver.orientation
[*]
[*] #设置装备为横屏
[*]
[*] driver.orientation = 'landscape'
[*]
[*] # 设置装备为竖屏
[*]
[*] driver.orientation = 'portrait'
[*] app安装卸载干系
[*] #判断app是否安装,参数是app的包名称
[*]
[*] driver.is_app_installed('com.tencent.xin')
[*]
[*] #安装app,参数是安装包路径
[*]
[*] driver.install_app('C:\\Users\\lixio\\Desktop\\douban.ipa')
[*]
[*] #卸载app,参数是包名称
[*]
[*] driver.remove_app('com.tencent.xin')
[*] 重启当前待测app
[*] #重新启动
[*]
[*] appdriver.reset()
[*] 重新运行app,注意该方法会重建session
driver.launch_app()
[*] 关闭app,只针对当前测试的app
driver.close_app()
[*] 获取装备时间
driver.device_time
[*] context干系操作,重要用于肴杂app操作webview界面时
[*] #获取当前context
[*]
[*] driver.current_context
[*]
[*] #获取当前所有context
[*]
[*] driver.contexts
[*]
[*] #切换到肴杂webview界面的context
[*]
[*] driver.switch_to.context('WEBVIEW_XXX')
[*]
[*] #切换到原生切换的context
[*]
[*] driver.switch_to.context('NATIVE_APP')
[*] 装备屏幕干系操作
[*] #判断装备是否锁屏
[*]
[*] driver.is_locked()
[*]
[*] #解锁屏幕,让屏幕亮起来
[*]
[*] driver.unlock()
[*]
[*] #锁定屏幕,可以传参锁几秒
[*]
[*] driver.lock()
[*] 键盘匿伏,不是很管用
[*] driver.hide_keyboard(key_name='NEXT')
[*]
[*] #点键盘上的NEXT键匿伏
[*]
[*] driver.hide_keyboard(key_name='DONE')
[*]
[*] #点键盘上的DONE键匿伏
[*]
[*] driver.hide_keyboard()
09 元素特有干系api
[*] 获取元素属性
[*] element.get_attribute('enabled')
[*]
[*] element.get_attribute('index')
[*]
[*] element.get_attribute('label')
[*]
[*] element.get_attribute('name')
[*]
[*] element.get_attribute('selected')
[*]
[*] element.get_attribute('type')
[*]
[*] element.get_attribute('value')
[*]
[*] element.get_attribute('wdRect')
[*] 获取元素干系坐标
[*] element.location.get('x') #获取元素起始点
[*]
[*] xelement.location.get('y') #获取元素起始点
[*]
[*] yelement.size.get('width') #获取元素的宽
[*]
[*] element.size.get('height') #获取元素的高
010 手势干系api
[*] 多点移动
[*] action = TouchAction(driver=driver)
[*]
[*] # 多个坐标点移动
[*]
[*] action.press(x=320,y=200).move_to(x=320,y=400).move_to(x=400,y=500).release().perform()
[*]
[*] #多个元素移动
[*]
[*] action.press(element=element).move_to(element=element1).move_to(element=element2).release().perform()
[*] 拖拽
[*] action = TouchAction(driver=driver)
[*]
[*] # 拖拽坐标点
[*]
[*] action.press(x=320,y=400).wait(3000).move_to(x=320,y=800).release().perform()
[*]
[*] #拖拽元素
[*]
[*] action.press(element=element).wait(3000).move_to(element=element1).release().perform()
[*] 长按
[*] action = TouchAction(driver=driver)
[*]
[*] # 长按某个坐标点
[*]
[*] action.long_press(x=320,y=400).release().perform()
[*]
[*] # 长按某个元素
[*]
[*] action.long_press(element=element).release().perform()
[*] 单击tap
[*] action = TouchAction(driver=driver)
[*]
[*] # 单击某个坐标点
[*]
[*] action.tap(x=320,y=400).perform().release()
[*]
[*] # 单击某个元素
[*]
[*] action.tap(element=element).perform().release()
011 肴杂app处理
[*] 开启电脑safari开发者选项
打开电脑的safari浏览器,按照下述步调操作
https://i-blog.csdnimg.cn/blog_migrate/d7b9d96731d143729d16164ef9360c24.png
https://i-blog.csdnimg.cn/blog_migrate/2c236ce79cdc057284429e9f4c194ae3.png
设置完成后在顶部菜单可以看到【开发】菜单
[*] 设置手机safari浏览器
设置-->Safari-->高级-->网页检查器(打开)
[*] 元素信息检察
在手机上打开待测app的webview页面,然后在电脑上做如下操作
https://i-blog.csdnimg.cn/blog_migrate/e97b16aea7de1606b4aaab54a8269da0.png
点击后就打开了开发者工具,这和web端的定位就一样了
https://i-blog.csdnimg.cn/blog_migrate/e6340ae794bee8a0878a55232c98413e.png
[*] 代码处理
对于webview界面的测试时,必要将driver切换至webview的context上,然后才气去定位元素
切换代码如下:
[*] # 为什么要做个循环,是因为在获取webview的context时不稳定
[*]
[*] # 循环10次获取,每次间隔一秒
[*]
[*] count = 10
[*]
[*] while count>0:
[*]
[*] time.sleep(1)
[*]
[*] # 获取当前所有的context
[*]
[*] contexts = driver.contexts
[*]
[*] for context in contexts:
[*]
[*] if 'WEBVIEW' in context:
[*]
[*] driver.switch_to.context(context)
[*]
[*] count = 0
[*]
[*] count -= 1
driver切换以后就可以按照web端的定位操作方式去操作了
012 H5页面处理
手机上H5页面,可以理解成用浏览器打开的app页面,其实就是网页,ios手机safari浏览器打开的H5的元素检察方式和第10步一样,差别的地方在于driver初始化参数的差别
[*] desired_caps = {
[*]
[*] "platformName": "ios",
[*]
[*] "deviceName": "iPhone12",
[*]
[*] "automationName": "XCuiTest",
[*]
[*] "platformVersion": "14.1",
[*]
[*] "udid": "00008101-001038A23AC0001E",
[*]
[*] "usePrebuiltWDA": True,
[*]
[*] "noReset": False,
[*]
[*] "wdaLocalPort": 8101,
[*]
[*] "showXcodeLog": True,
[*]
[*] "autoAcceptAlerts": True,
[*]
[*] "newCommandTimeout":600,
[*]
[*] "browserName":"Safari" #指定浏览器
[*]
[*] }
基本操作方法和web端就一致了
感谢每一个认真阅读我文章的人,投桃报李总是要有的,固然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
https://i-blog.csdnimg.cn/direct/d6ecf8f51a0c44218d87df259037ea5b.png
这些资料,对于【软件测试】的朋侪来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有必要的小同伴可以点击下方小卡片领取
https://img-blog.csdnimg.cn/direct/c7c3209b53db4e71bfff8d42a6bbd8be.gif
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]