Appium XCUITest Driver Capabilities Appium XCUITest Driver

发布于 2024-03-18  819 次阅读


appium Capabilities原文地址

This page lists various capabilities used and implemented by the XCUITest driver. To learn more about capabilities, refer to the Appium documentation.

General

CapabilityDescription
platformName可以设置为ios。如果提供了automationName, Appium本身对这个能力值没有严格要求,所以如果需要,可以随意将其分配给任何支持的平台名称,例如,让Selenium网格工作
browserName要在其上运行测试的浏览器名称。如果提供了此功能,则驱动程序将尝试在Web上下文模式(默认应用本机模式)中启动测试。更多细节请阅读自动化混合应用程序。通常等于safari。
appium:automationName必须始终设置为xcuitest。automationName的值不区分大小写进行比较。
appium:deviceName被测试设备的名称。考虑为真实设备设置udid,并将其用于模拟器选择
appium:platformVersion模拟器或真实设备的平台版本。如果不提供udid,则该功能用于设备自动检测
appium:udid被测试设备的UDID。可以从Xcode->窗口->设备和模拟器窗口中检索。如果运行并行测试或使用真实设备运行测试,请始终设置此功能。或者通过tidevice来获取
appium:noReset如果设置为true,防止会话启动前设备被重置。这意味着测试中的应用程序不会被终止,其数据也不会被清理。默认为False
appium:fullReset设置为true总是强制测试应用程序在启动新会话之前完全卸载。在特定情况下,应用程序数据可能会缓存在真实设备上。有关在真实设备上清除过时应用程序数据的更多详细信息,请检查故障排除。默认为False
appium:printPageSourceOnFindFailure如果发生任何错误,强制服务器将实际的XML页面源转储到日志中。默认为False。
appium:includeDeviceCapsToSessionInfo是否将屏幕信息作为Get会话功能的结果。它包括pixelRatio, statBarHeight和viewportRect,但它会导致对WDA的额外API调用,这可能会增加响应时间,就像这个问题一样。默认为true。从驱动程序版本5开始,该功能不再起作用
appium:resetLocationService是否在真实设备上重置会话删除中的位置服务。默认为false。
appium:customSSLCert在IOS模拟器和真实设备中添加根SSL证书。只有在服务器上有py-ios-device工具时,真正的设备才能正常工作。证书内容必须是PEM格式,如:-----BEGIN certificate -----MIIFWjCCBEKg…——结束证书

App

CapabilityDescription
appium:bundleId测试应用程序的Bundle标识符,例如com.mycompany.myapp。如果提供app,能力值会自动计算。如果不提供app或bundleId功能,则XCUITest驱动程序从主屏幕启动。
appium:initialDeeplinkUrl一个deeplink URL,用于运行分配给appium:bundleId的应用程序,或者在appium:bundleId未设置时,分配给处理特定deeplink协议的默认应用程序。如果与browserName=safari一起提供,则会让safari在启动时预先加载给定的URL,从而加快会话启动。在这种情况下,appium:initialSafariUrl能力的值将被忽略。如果能力的值不是一个有效的URL,或者XCTest无法将其与任何现有的应用关联,或者实际的iOS版本低于16.4,那么在session init中就会抛出错误
appium:app要测试的应用程序的完整路径(应用程序必须位于服务器运行的同一台机器上)。支持。ipa和。app应用程序扩展。它也支持压缩的.app包。也可以是一个到远程位置的URL。如果app和bundleId都没有提供,那么驱动程序将从主屏幕启动,并期望测试知道下一步要做什么。不要同时提供app和browserName功能。
appium:enforceAppInstall如果设置为false, xcuitest驱动程序将验证测试设备上当前安装的应用程序版本是否比该版本旧,该版本通过appium:app值提供。如果候选应用程序的版本号与已安装的版本号相同或更旧,则不会发生应用程序重装。用于比较的版本号必须在应用程序的Info.plist中以CFBundleVersion语义版本兼容值的形式提供。默认情况下不执行验证,例如所提供的应用程序总是(重新)安装,这可能会降低测试套件的速度。当appium: enforappinstall为true时,如果在某种情况下被测试的应用程序仍然在设备上,则应用程序数据可能会被缓存到真实的设备上。有关在真实设备上清除过时应用程序数据的更多详细信息,请检查故障排除。从XCUITest驱动程序4.19.0开始可用。
appium:localizableStringsDir在应用程序包中的何处查找可本地化字符串。默认为en.lproj
appium:otherApps在运行测试之前要安装的应用程序或应用程序列表(以JSON数组形式)。请注意,它不能在真正的iOS设备上工作。例如:["http://appium.github.io/appium/assets/TestApp9.4.app.zip", "/path/to/app- b.p app"]
appium:languageiOS应用程序要设置的语言,例如fr。请阅读语言id以获取有关此功能可用值的更多详细信息。如果在模拟器上执行测试,那么UI语言也会改变。您还可以在运行时使用mobile: configureLocalization扩展更改模拟器语言。
appium:locale为iOS应用程序设置的区域设置,例如fr_CA。请阅读区域设置id以获取有关此功能可用值的更多详细信息。如果在模拟器上执行测试,那么UI区域设置也会改变。您还可以在运行时使用mobile: configureLocalization扩展更改模拟器区域设置。
appium:calendarFormatiOS模拟器要设置的日历格式,例如公历或波斯日历。只能与appium:locale一起设置。
appium:appPushTimeout应用上传的超时时间,单位为毫秒。仅适用于真实设备。缺省值为30000ms
appium:appInstallStrategy针对实际设备选择应用安装策略。支持以下策略:串行(默认)—按顺序将app文件推送到设备;这是性能最差的策略,但也是最可靠的;并行——同时推送app文件;这通常是性能最好的策略,但有时不太稳定;Ios-deploy -告诉驱动程序使用第三方工具Ios-deploy来安装应用程序;显然,该工具必须首先单独安装,并且必须在PATH中存在才能使用。

WebDriverAgent

CapabilityDescriptionValues
appium:xcodeOrgId苹果开发者团队标识符字符串。必须与xcodeSigningId一起使用才能生效。e.g., JWL241K123
appium:xcodeSigningId表示已签名证书的字符串。必须与xcodeOrgId结合使用。通常只有iPhone Developer,所以默认值(如果不包含)是iPhone Developere.g., iPhone Developer
appium:xcodeConfigFile可选Xcode配置文件的完整路径,该配置文件指定了在真实设备上运行WebDriverAgent所需的代码签名身份和团队。e.g., /path/to/myconfig.xcconfig
appium:updatedWDABundleIdBundle id用于更新WDA,然后在真实设备上构建和启动。这个bundle id必须与一个有效的配置文件相关联。e.g., io.appium.WebDriverAgentRunner
appium:keychainPath从系统keychain导出的私钥的完整路径。在真实设备上测试时,与keychainPassword一起使用。e.g., /path/to/MyPrivateKey.p12
appium:keychainPasswordkeychainPath中指定的keychain的解锁密码。e.g., super awesome password
appium:derivedDataPath与usePrebuiltWDA功能一起使用,并选择在哪里搜索现有的WDA应用程序。如果没有设置该功能,那么Xcode将把派生数据存储在首选项的默认根目录中。
appium:webDriverAgentUrl如果提供,Appium将在这个URL上连接到现有的WebDriverAgent实例,而不是启动一个新的实例。e.g., http://localhost:8100
appium:useNewWDA如果为真,强制卸载设备上任何现有的WebDriverAgent应用程序。如果你想为每个会话应用不同的WebDriverAgent启动选项,将其设置为true。不过,它只能保证在模拟器上稳定工作。真实的设备需要WebDriverAgent客户端尽可能长时间运行而无需重新安装/重启,以避免类似https://github.com/facebook/WebDriverAgent/issues/507的问题。false值(自驱动程序版本2.35.0以来的默认行为)将尝试检测当前运行的WDA监听器,由之前的测试会话执行,并在可能的情况下重用它,这是强烈建议用于实际设备测试,并在一般情况下加快多个测试套件的速度。如果WDA没有监听并且没有设置webDriverAgentUrl功能,新的WDA会话将在默认URL (http://localhost:8100)处触发。useNewWDA能力的负值/未设置值在xcuitest驱动版本2.35.0之前无效。e.g., true
appium:wdaLaunchTimeout等待WebDriverAgent可以ping的时间,单位为ms。默认为60000ms。e.g., 30000
appium:wdaConnectionTimeout超时,单位为ms,用于等待WebDriverAgent的响应。默认为240000ms。e.g., 1000
appium:wdaStartupRetries尝试在设备上构建和启动WebDriverAgent的次数。默认值为2。e.g., 4
appium:wdaStartupRetryInterval在尝试构建和启动WebDriverAgent之间的等待时间,以ms为单位。默认为10000ms。e.g., 20000
appium:wdaLocalPort如果指定了这个值,它将用于通过USB从Mac主机转发流量到真正的ios设备。默认值与设备上WDA使用的端口号相同。e.g., 8100
appium:wdaBaseUrl如果指定了这个值,它将被用作构建自定义WebDriverAgent url的前缀。它不同于webDriverAgentUrl,因为如果后者被设置,那么它期望WebDriverAgent已经在监听并跳过构建阶段。默认为http://localhoste.g., http://192.168.1.100
appium:showXcodeLog是否显示用于运行测试的Xcode命令的输出。如果这是真的,在启动时将有很多额外的日志记录。默认为falsee.g., true
appium:iosInstallPause在设备上安装应用程序和启动WebDriverAgent之间的暂停时间,单位为毫秒。特别用于较大的应用程序。默认值为0e.g., 8000
appium:usePrebuiltWDA跳过运行WDA应用程序的构建阶段。然后,构建是用户的责任。仅适用于Xcode 8+。默认为false。e.g., true
appium:shouldUseSingletonTestManager在WebDriverAgent中使用默认代理进行测试管理。设置为false有时有助于解决套接字挂起问题。默认为true。e.g., false
appium:waitForIdleTimeout等待被测试应用程序空闲的时间,单位为浮点秒。XCTest要求应用程序的主线程处于空闲状态,以便在其上执行任何操作,因此如果测试中的应用程序不断占用主线程,WDA甚至可能不会启动/冻结。缺省值是10(秒)。将其设置为0完全禁用空转检查(不推荐),与将waitForQuiescence设置为false的效果相同。自Appium 1.20.0以来可用。
appium:useXctestrunFile使用Xctestrun文件启动WDA。它会在bootstrapPath中搜索这样的文件。预期的文件名称是webdriveragentrun_iphoneos <sdkVersion>-arm64。实际设备的xctestrun和webdriveragentrun_iphonessimulator <sdkVersion>-x86_64。Xctestrun用于模拟器。你可以为模拟器和真实设备做WebDriverAgent项目的测试构建,然后你将看到这样的产品文件夹,你需要将该文件夹的内容复制到bootstrapPath位置。由于此功能预计您已经构建了WDA项目,因此它既不会检查您是否有构建WDA所需的依赖项,也不会尝试构建项目。默认为false。提示:Xcodebuild为目标平台版本构建。我们建议您使用您想要作为原始WDA模块运行的最小操作系统版本构建。例如,如果你为12.2版本构建WDA,由于模拟器加载一些模块错误,模块无法在iOS 11.4上运行。使用iOS 11.4构建的模块可以在iOS 12.2上运行。(这是xcodebuild的预期行为。)e.g., true
appium:useSimpleBuildTest如果为false,则在Xcode 8中使用Build -for-testing模式构建,并使用test-without-building模式运行测试。默认为false。true or false
appium:wdaEventloopIdleDelay延迟对-[XCUIApplicationProcess seteventlophasidled:]的调用,延迟该能力指定的秒数。这可以帮助应用程序在没有明显原因的情况下保持静态(并因此导致创建会话失败)。这增加了会话创建的时间,因为-[XCUIApplicationProcess setEventLoopHasIdled:]被多次调用。如果您启用此功能,至少从3秒开始,并尝试增加它,如果创建会话仍然失败。默认值为0。e.g. 5
appium:processArguments进程参数和环境,它们将在新的会话请求中发送到WebDriverAgent服务器。请使用mobile:launchApp在会话中启动带有进程参数的应用程序。{ args: ["a", "b", "c"] , env: { "a": "b", "c": "d" } } or '{"args": ["a", "b", "c"], "env": { "a": "b", "c": "d" }}'
appium:autoLaunch当设置为false时,防止测试应用程序作为新会话启动过程的一部分自动启动。启动成为用户的责任。默认为true。true or false
appium:allowProvisioningDeviceRegistration如果有必要,允许xcodebuild在开发者门户上注册你的目标设备。需要在Xcode的Accounts首选项面板中添加开发者账户。默认为false。true or false
appium:resultBundlePath在安全标志下,将结果包路径指定为WebDriverAgent构建的xcodebuild参数(请检查下面的选择功能部分)。WebDriverAgent进程必须每次启动/停止以获取此属性的更改值。将useNewWDA指定为true可能会有所帮助。请阅读man xcodebuild了解更多细节。e.g. /path/to/resultbundle
appium:resultBundleVersion为WebDriverAgent构建指定结果包的版本号作为xcodebuild参数。默认值取决于你的Xcode版本。请阅读man xcodebuild了解更多细节。e.g. /path/to/resultbundle
appium:maxTypingFrequency最大频率的键盘输入和清楚。如果你的测试因为输入错误而失败,你可能需要调整这一点。默认每分钟击键60次。e.g., 30
appium:simpleIsVisibleCheck使用原生方法来确定元素的可见性。在某些情况下,这需要很长时间。将此功能设置为false将导致系统使用元素的位置和大小来确保它们在屏幕上可见。然而,在某些情况下,这可能会导致错误的结果。默认值为false,但iOS 9.3默认值为true。e.g., truefalse
appium:waitForQuiescence它允许在执行查询时打开/关闭WebDriverAgent中的等待应用程序静默。默认值为true。如果你关掉它,就可以避免这类问题。从Appium 1.20.0开始,考虑使用waitForIdleTimeout功能e.g false
appium:mjpegServerPortWDA广播被测设备的屏幕截图编码成MJPEG格式的端口号。如果默认端口由于其他并行运行的测试而繁忙,则可能需要更改此值。默认值:9100e.g. 12000
appium:screenshotQuality改变手机屏幕截图的质量,xctest/xctimagequality默认值为1。0是最高质量,2是最低质量。你也可以通过设置命令来改变它。在iPad Pro这样的高分辨率设备上,0可能会导致OutOfMemory崩溃。e.g. 012
appium:autoAcceptAlerts如果iOS系统弹出警报,则自动接受它们。这包括隐私访问权限警报(例如,位置,联系人,照片)。默认值为falsetrue or false
appium:autoDismissAlerts如果所有iOS警报弹出,则自动关闭。这包括隐私访问权限警报(例如,位置,联系人,照片)。默认值为falsetrue or false
appium:disableAutomaticScreenshots禁止XCTest在每次交互时自动截图。默认值由WebDriverAgent的配置决定,当前默认值为true。true or false
appium:shouldTerminateApp指定会话结束时是否终止应用程序。只有将应用标识符传递给测试会话时,此功能才有效(通过设置bundleId显式传递,或通过提供app隐式传递)。除非noReset能力设置为true,否则默认值为true。true or false
appium:forceAppLaunch指定会话启动时已经在运行的应用程序是否应该强制重启。只有将应用标识符传递给测试会话时,此功能才有效(通过设置bundleId显式传递,或通过提供app隐式传递)。除非noReset能力设置为true,否则默认值为true。true or false
appium:useNativeCachingStrategy将此功能设置为false,以便使用自定义元素缓存策略。这可能有助于避免属性更改时出现陈旧元素异常。默认情况下,对所有本地定位器(例如,除了xpath)使用原生XCTest缓存解析(true)。查看相应的WebDriverAgent pull request获取更多详细信息。true or false

Web Context

CapabilityDescriptionValues
appium:absoluteWebLocations当在webview中使用Get元素位置命令时,该功能将返回相对于页面原点的坐标,而不是相对于当前滚动偏移量的坐标。这个功能在webview之外没有任何作用。默认的错误。e.g., true
appium:safariGarbageCollect在Safari上执行脚本时,打开/关闭Web Inspector垃圾回收功能。开启可能会提高性能。默认为false。true or false
appium:includeSafariInWebviews将Safari web上下文添加到原生/webview应用测试期间可用的上下文列表中。如果测试打开了Safari并需要与之交互,这很有用。默认为false。true or false
appium:safariLogAllCommunication以纯文本形式记录所有发送到Web Inspector和从Web Inspector收到的plists。对于某些操作,数据量可能会很大,所以建议只在必要时使用。默认为false。true or false
appium:safariLogAllCommunicationHexDump记录所有发送和从Web Inspector接收的通信,作为原始十六进制转储和可打印字符。此日志记录在任何数据操作之前完成,因此可以阐明一些通信问题。像appium:safariLogAllCommunication一样,它在某些情况下会产生大量的数据,所以建议仅在必要时使用。默认为false。true or false
appium:safariSocketChunkSize在iOS 11+的真实设备上,发送到Web Inspector的数据的大小,以字节为单位。有些设备在向Web Inspector发送大量数据时挂起,将它们分解为较小的部分可能在这些情况下很有帮助。默认值为16384(也是可能的最大值)e.g., 1000
appium:safariWebInspectorMaxFrameLengthWeb检查器中单个数据框的最大字节数。过高的值可能会导致速度变慢和/或内存泄漏。过低的值可能会引入缓冲区溢出异常。默认值为20MB (20*1024*1024)e.g. 1024100*1024*1024
appium:additionalWebviewBundleIdswebview可能的bundle标识符数组(或JSON数组)。如果Web检查器为应用程序返回修改过的bundle标识符,这有时是必要的。默认值为[]e.g., ['io.appium.modifiedId', 'ABCDEF']
appium:webviewConnectTimeout在ms中,等待webview首次出现在MobileSafari或hybrid应用程序中的时间。默认值为0e.g., '5000'
appium:safariIgnoreWebHostnames提供一个Safari自动化工具应该忽略的主机名列表(逗号分隔)。这是为了防止webkit出现bug,即web上下文无意中更改为第三方网站,从而导致测试卡住。常见的罪魁祸首是搜索引擎(yahoo, bing,谷歌)和about:blanke.g. 'www.yahoo.com, www.bing.com, www.google.com, about:blank'
appium:nativeWebTap在web context模式下启用原生的、非javascript的点击。默认为false。警告:有时原生点击的精确性可能会被破坏,因为没有可靠的方法将web元素坐标映射到原生元素。true
appium:nativeWebTapStrict强制本机点击由XCUITest驱动完成,而不是WebDriverAgent。仅适用于启用nativeWebTap的情况。默认为Falsefalse
appium:safariInitialUrl初始的safari url,默认是本地欢迎页面。将其设置为空字符串将跳过初始的导航。e.g. https://www.github.com
appium:safariAllowPopups(仅限模拟器)允许javascript在Safari中打开新窗口。默认保持当前sim设置。true or false
appium:safariIgnoreFraudWarning(仅在模拟器中)防止Safari显示欺诈网站警告。默认保持当前sim设置。true or false
appium:safariOpenLinksInBackground(仅在模拟器中)Safari是否应该允许在新的窗口中打开链接。默认保持当前sim设置。true or false
appium:webviewConnectRetries向远程调试器发送连接消息的次数,以获取webview。默认值:8e.g., 12
appium:webkitResponseTimeout(仅限真实设备)设置在Safari会话中等待WebKit响应的时间,单位为ms。默认值为5000e.g., 10000
appium:enableAsyncExecuteFromHttps能够允许模拟器在使用HTTPS的页面上执行异步JavaScript。默认为falsetrue or false
appium:fullContextList为get available context命令返回上下文的详细信息。如果启用此功能,则返回的上下文列表中的每个项目将额外包含WebView标题、完整URL和bundle标识符。默认为false。true or false
appium:enablePerformanceLogging启用Safari的性能日志记录(默认为false)truefalse
appium:autoWebview如果可用,直接移动到Webview上下文。默认的错误truefalse

Other

CapabilityDescriptionValues
appium:resetOnSessionStartOnly测试会话结束时是否执行重置(false)或(true)。将此变量设置为true并运行模拟器(自版本1.6.4以来的默认行为)可以显著缩短测试会话初始化的持续时间。Either true or false. Defaults to true
appium:commandTimeouts执行WDA后端命令的自定义超时时间(秒)。如果WDA后端意外冻结,或者需要太多时间失败并阻塞自动化测试的执行,这可能很有用。该值应该是字符串类型,可以包含在强制终止会话之前等待每个WDA命令执行的最大毫秒数,也可以包含一个有效的JSON字符串,其中键是内部Appium命令名称(你可以在日志中找到这些,查找“Executing command 'command_name'”记录),值是以毫秒为单位的超时时间。你也可以设置` default `键来为所有其他没有显式枚举为JSON键的命令分配超时时间。'120000''{"findElement": 40000, "findElements": 40000, "setValue": 20000, "default": 120000}'
appium:useJSONSource从WDA获取JSON源,并在Appium服务器端将其转换为XML。默认为false。e.g., true
appium:skipLogCapture跳过开始捕获日志,例如崩溃、系统、safari控制台和safari网络。它可以提高性能,比如网络性能。日志相关命令将无法执行。默认为false。true or false
appium:launchWithIDB使用idb而不是xcodebuild启动WebDriverAgentRunner。跳过xcodebuild过程可以节省大量时间,尽管idb可能不是很可靠,特别是对于新的Xcode sdk。有关可能的兼容性问题的更多详细信息,请查看idb存储库。默认为falsetrue or false
appium:showIOSLog是否在appium日志中显示从设备捕获的任何日志。默认的错误true or false
appium:clearSystemFiles当测试会话关闭时,是否清理临时的XCTest文件(例如日志)。默认为Falsetrue or false
appium:newCommandTimeout假定客户端已经停止发送请求,驱动程序等待新命令的时间(单位为秒)。超时后,会话将被删除。默认为60秒。将其设置为0会禁用定时器。e.g. 100

一名测试工作者,专注接口测试、自动化测试、性能测试、Python技术。