appium服务端的版本分为下令行版、桌面版,两者有些区别,两者都要安装
01 appium ios自动化情况搭建
起首必须有mac电脑,在app store中搜刮xcode并安装,安装完成后肯定记得打开一次,会自动安装xcode的的一些工具
以下步调均是在mac电脑终端下执行
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
|
brew install libimobiledevice --HEAD
| 有大概会报错 SSL certificate problem: certificate has expired,那么就执行如下指令后再次执行上述下令
git config --global http.sslVerify false
|
npm install appium-doctor
|
执行效果中没有error即可
02 appium desktop版本安装
下载地址:
https://github.com/appium/appium-desktop/releases/tag/v1.21.0
03 webdriveragent编译
如果是ios模拟器,那么webdriveragent无需处理
- 真机下webdriveragent编译
appium下令行版本的webdriveragent源码路径
/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent
进入上述目录,双击WebDriverAgent.xcodeproj文件
先连接真机
1、xcode选择真机
图中红框两个地方都要举行选择
2、修改项目的bundleid
bundleid必须包管唯一,否则署名时会报错
图中红框框中的TARGETS都要举行修改
以WebDriverAgentRunner这个TARGETS为例,修改bundleid
其他的TARGETS做相同操作
3、署名TARGETS
针对第2步中框中的每个TARGETS做署名操作,以WebDriverAgentRunner这个TARGETS为例
4、执行项目测试
执行webdriveragent的测试会在真机上安装一个WebDriverAgentRunner的app,并且启动他,在手机上启动一个基于8100的http服务,该服务是appium举行操作的必备条件
先选择测试文件,执行测试
第一次执行大概会报如下错误
那么进入手机设置-->通用-->装备管理,信任你的applie id即可,然后再重新执行测试,并且打开日记检察
日记中没有报错,并且出现图中红框的地址,说明WebDriverAgentRunner 这个app就安装到了手机上并且启动了服务
然后停止测试,点击xcode的停止,至此,wda的app就已经安装在待测手机上了
04 ios元素信息检察
1、以豆瓣app为例,因此在真机上先安装豆瓣app
由于参数中必要用得手机干系信息及豆瓣app的bundle_id,因此我们先获取这些信息,在终端下执行如下下令
# 获取当前连接的装备信息
ios-deploy -c
|
此中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
稍等半晌,会出现inspect调试界面
05 appium在ios的工作原理
06 appium 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
|
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-----
|
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
|
| 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="书影音"')
复制代码 比较运算符>、<、==、>=、<=、!=:
- [/code] [list=1]
- [*] driver.find_element(MobileBy.IOS_PREDICATE,'value>100')
- [*]
- [*] driver.find_element(MobileBy.IOS_PREDICATE,'value<100')
- [*]
- [*] driver.find_element(MobileBy.IOS_PREDICATE,'value!=100')
- [/list] [b]正则匹配MATCHES:[/b]
- [code]driver.find_element(MobileBy.IOS_PREDICATE,'name MATCHES "正则表达式"')
复制代码 MobileBy.IOS_CLASS_CHAIN 定位补充:
MobileBy.IOS_CLASS_CHAIN定位方式和xpath极其相似,也是按照元素层级和元素属性举行定位的
- [/code] [list=1]
- [*] #查找type属性为XCUIElementTypeSecureTextField并且value为请输入密码的元素
- [*]
- [*] driver.find_element(MobileBy.IOS_CLASS_CHAIN,'**/XCUIElementTypeSecureTextField[`value== "请输入密码"`]')
- [*]
- [*] #查找type属性为XCUIElementTypeSecureTextField的第一个
- [*]
- [*] driver.find_element(MobileBy.IOS_CLASS_CHAIN,'**/XCUIElementTypeSecureTextField[1]')
- [/list] [size=3][b]08 driver常用干系api[/b][/size]
-
- [list]
- [*] [b]获取屏幕分辨率[/b]
- [/list] [code]
复制代码
- driver.get_window_size()['width'] #获取屏幕的宽
- driver.get_window_size()['height'] #获取屏幕的高
- [/code] [list=1]
- [*] # 起始点坐标200,700 结束点坐标200,100 连续时间500毫秒
- [*]
- [*] driver.swipe(200,700,200,100,500)
- [/list]
- [list]
- [*] [b]启动激活第三方app[/b]
- [/list] [code]
复制代码
- # 启动已安装的某个应用,参数第一个是应用的
- bundleiddriver.activate_app('com.tencent.xin')
- [/code] [list=1]
- [*] #获取装备横竖屏方向,PORTRAIT表示竖屏,LANDSCAPE表示横屏
- [*]
- [*] driver.orientation
- [*]
- [*] #设置装备为横屏
- [*]
- [*] driver.orientation = 'landscape'
- [*]
- [*] # 设置装备为竖屏
- [*]
- [*] driver.orientation = 'portrait'
- [/list]
- [list]
- [*] [b]app安装卸载干系[/b]
- [/list] [code]
复制代码
- #判断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')
- [/code] [list=1]
- [*] #重新启动
- [*]
- [*] appdriver.reset()
- [/list]
- [list]
- [*] [b]重新运行app,注意该方法会重建session[/b]
- [/list] [code]driver.launch_app()
复制代码
- context干系操作,重要用于肴杂app操作webview界面时
- [/code] [list=1]
- [*] #获取当前context
- [*]
- [*] driver.current_context
- [*]
- [*] #获取当前所有context
- [*]
- [*] driver.contexts
- [*]
- [*] #切换到肴杂webview界面的context
- [*]
- [*] driver.switch_to.context('WEBVIEW_XXX')
- [*]
- [*] #切换到原生切换的context
- [*]
- [*] driver.switch_to.context('NATIVE_APP')
- [/list]
- [list]
- [*] [b]装备屏幕干系操作[/b]
- [/list] [code]
复制代码
- #判断装备是否锁屏
- driver.is_locked()
- #解锁屏幕,让屏幕亮起来
- driver.unlock()
- #锁定屏幕,可以传参锁几秒
- driver.lock()
- [/code] [list=1]
- [*] driver.hide_keyboard(key_name='NEXT')
- [*]
- [*] #点键盘上的NEXT键匿伏
- [*]
- [*] driver.hide_keyboard(key_name='DONE')
- [*]
- [*] #点键盘上的DONE键匿伏
- [*]
- [*] driver.hide_keyboard()
- [/list] [size=3][b]09 [/b][b][b]元素特有干系api[/b][/b][/size]
-
- [list]
- [*] [b]获取元素属性[/b]
- [/list] [code]
复制代码
- 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')
- [/code] [list=1]
- [*] element.location.get('x') #获取元素起始点
- [*]
- [*] xelement.location.get('y') #获取元素起始点
- [*]
- [*] yelement.size.get('width') #获取元素的宽
- [*]
- [*] element.size.get('height') #获取元素的高
- [/list] [size=3][b]0[/b][b]10 手势干系api[/b][/size]
-
- [list]
- [*] [b]多点移动[/b]
- [/list] [code]
复制代码
- 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()
- [/code] [list=1]
- [*] 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()
- [/list]
- [list]
- [*] [b]长按[/b]
- [/list] [code]
复制代码
- action = TouchAction(driver=driver)
- # 长按某个坐标点
- action.long_press(x=320,y=400).release().perform()
- # 长按某个元素
- action.long_press(element=element).release().perform()
- [/code] [list=1]
- [*] action = TouchAction(driver=driver)
- [*]
- [*] # 单击某个坐标点
- [*]
- [*] action.tap(x=320,y=400).perform().release()
- [*]
- [*] # 单击某个元素
- [*]
- [*] action.tap(element=element).perform().release()
- [/list] [size=3][b]0[/b][b]11 肴杂app处理[/b][/size]
-
- [list]
- [*] [b]开启电脑safari开发者选项[/b]
- 打开电脑的safari浏览器,按照下述步调操作
-
- [align=center][img]https://i-blog.csdnimg.cn/blog_migrate/d7b9d96731d143729d16164ef9360c24.png[/img][/align]
-
- [align=center][img]https://i-blog.csdnimg.cn/blog_migrate/2c236ce79cdc057284429e9f4c194ae3.png[/img][/align]
- 设置完成后在顶部菜单可以看到【开发】菜单
- [*] [b]设置手机safari浏览器[/b]
- 设置-->Safari-->高级-->网页检查器(打开)
- [*] [b]元素信息检察[/b]
- 在手机上打开待测app的webview页面,然后在电脑上做如下操作
-
- [align=center][img]https://i-blog.csdnimg.cn/blog_migrate/e97b16aea7de1606b4aaab54a8269da0.png[/img][/align]
- 点击后就打开了开发者工具,这和web端的定位就一样了
-
- [align=center][img]https://i-blog.csdnimg.cn/blog_migrate/e6340ae794bee8a0878a55232c98413e.png[/img][/align]
- [*] [b]代码处理[/b]
- 对于webview界面的测试时,必要将driver切换至webview的context上,然后才气去定位元素
- 切换代码如下:
- [/list] [code]
复制代码
- # 为什么要做个循环,是因为在获取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初始化参数的差别
[code][/code]
- 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端就一致了
感谢每一个认真阅读我文章的人,投桃报李总是要有的,固然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋侪来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有必要的小同伴可以点击下方小卡片领取
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |