您需要适当的能力定义和请求。
来自我的旧笔记(不幸的是对于 Android):
停止/杀死 Selenium 服务器、所有 Appium 实例和所有测试(Ruby/Cucumber)。
启动 Selenium 服务器
java -jar selenium-server-standalone-3.6.0.jar -role hub
保存SM_G900F.json:
{
"capabilities":
[
{
"applicationName":"SM_G900F",
"browserName":"android",
"deviceName":"SM_G900F",
"version":"7.0",
"maxInstances":1,
"platform":"Android"
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://127.0.0.1:80801/wd/hub",
"maxSession":6,
"port":"80801",
"bootstrap-port":"80802",
"host": "localhost",
"register": true,
"registerCycle": 5000,
"hubPort": "4444",
"hubHost": "localhost"
}
}
确保将80801 和80802 更改为每个设备的空闲端口!
运行appium:
appium --nodeconfig /path_to/SM_G900F.json -p 80801 --default-capabilities '{"udid":"BOGAA1BBB412"}'
udid 是 adb devices 为您提供的,然后再次更改 80801
检查设备是否在http://127.0.0.1:4444/wd/console上正确注册
最后是红宝石:
require 'appium_lib'
opts_dut = {
caps: {
platformName: :android,
version: '7.0',
deviceName: '*',
appPackage: 'your.package',
appActivity: 'your.MainActivity',
noReset: true,
autoLaunch: false,
automationName: 'uiautomator2'
},
appium_lib: {
server_url: 'http://127.0.0.1:4444/wd/hub',
wait_timeout: 300,
wait_interval: 100,
newCommandTimeout: 3000
}
}
@T = Appium::Driver.new(opts_dut, true).start_driver
@T.find_elements(:uiautomator, "new UiSelector().textMatches(\"(?is).*SEND.*\"))")
puts @T.page_source
@T.quit
如果我记得很清楚,请求 deviceName 和/或 version 效果很好。因此,如果您启动多个节点并正确指定deviceName 和version,那么您甚至可以并行多次请求它。如果您使用通配符*,如上例所示,则表示任何deviceName,因此只请求version 7.0。即使您的测试失败,请确保运行@T.quit 以释放设备(将其放入挂钩后)。