我已经看到很多线索有这个问题,但我似乎找不到一个好的答案。他们都说启动两台appium服务器,将设备同步到两个不同的端口然后运行它。然而,这似乎对我没有用。继承人我做的事情..
从我的testng文件运行我的测试。
<test name="Test 1">
<parameter name="deviceName" value=""/>
<parameter name="platformName" value="Android"/>
<parameter name="browserName" value="Chrome"/>
<parameter name="local" value="appium"/>
<parameter name="baseUrl" value="https://mtest.com/"/>
<parameter name="bsAccount" value="http://0.0.0.0:4476/wd/hub"/>
<classes>
<class name="com.testsuites.regression.Smoke"/>
</classes>
</test>
<test name="Regression">
<parameter name="deviceName" value=""/>
<parameter name="platformName" value="Android"/>
<parameter name="browserName" value="Chrome"/>
<parameter name="local" value="appium"/>
<parameter name="baseUrl" value="https://mtest.com/"/>
<parameter name="bsAccount" value="http://0.0.0.0:4475/wd/hub"/>
<classes>
<class name="com.testsuites.regression.Regression"/>
</classes>
</test>
是的我已将相应的UDID放入deviceName参数中。我通过intellij这样做,运行Windows 7.感谢您的帮助!
答案 0 :(得分:3)
构建Selenium Grid以允许自动运行和处理多个selenium会话。它可以配置为多个设备(与appium结合使用时),允许并行或标准测试,并允许您基于功能系统为每个设备创建节点。
<强>集线器强>
Selenium Grid hub是一个中央服务器,可管理运行多个测试的能力。
运行以下命令以启动集线器:
$java -jar path/to/selenium-server-standalone-X.X.X.jar -role hub -port 4444
<强>节点强>
安装appium(除非你已经有)
$npm install –g appium
您需要为每个节点提供一个JSON文件,该文件概述了此节点用于的设备(或多个设备)的功能:
{
"capabilities":
[
{
"browserName": "Chrome",
"deviceName": "deviceName",
"device": "device",
"udid":"XXXXXXXX",
"version":"X.X.X",
"maxInstances": 5,
"platform":"ANDROID",
"platformName": "Android"
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":10000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://0.0.0.0:4723/wd/hub",
"maxSession": 5,
"port": 4723,
"host": "0.0.0.0",
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "localhost"
}
}
请记住,每个节点都需要为url
和port
配置使用不同的端口。例如,4723。
创建节点
$appium --nodeconfig /Path/To/Config.json -p 4723 -bp 5723 --chromedriver-port 6723
每个节点需要三个唯一的端口(端口,Bootstrap端口,ChromeDriver端口)和-p
指定的端口,我发现需要与配置中给出的端口相同。
<强>测试强>
我建议使用测试框架,例如TestNG或JUnit,它允许您运行测试套件并在@BeforeClass
方法等中传递功能。
但基本上你需要做的就是使用与JSON配置文件中为某个节点指定的功能相同的功能创建一个AndroidDriver,然后AndroidDriver的该实例将与该特定节点相关联(Selenium Grid处理此问题)与节点关联的设备。一旦你知道你在做什么,这真的很简单!
像这样初始化AndroidDriver:
driver.set(new AndroidDriver(new URL(SELENIUM_HUB_URL),
capabilities));
人们常犯的错误是将AndroidDriver传递给节点URL而不是Hub URL(http://0.0.0.0:4723/wd/hub
而不是http://0.0.0.0:4444/wd/hub
)这是非常常见的,因为它至少会在最初工作,但是尝试使用任何Selenium Grid特定功能(例如多个设备)一切都会破坏。
祝你好运,我希望这会有所帮助,
利安
答案 1 :(得分:1)
我正在使用Selenium Grid在多个设备上执行此操作。但你也应该能够在没有SG的情况下做到这一点。也许你在启动Appium节点时错过了一些参数。我使用以下内容:
node appium -p <port> --udid <UDID> -bp <bootstrap_port>