一步一步的过程
使用 GRID 与 Appium 进行并行测试:我将描述对我有用的方法。使用 Appium 创建 Selenium Grid
- 设置 selenium 网格在本地文件系统上下载 selenium 独立服务器 jar 打开终端并导航到放置 jar 文件的目录并执行以下命令:
java -jar selenium-server-standalone-2.53.3.jar -role hub
Open http://localhost:4444/grid/console and you should be able to see GRID console in your browser.
- 设置 Appium 节点在这里你必须创建 json 文件。假设你要在两个设备上运行,然后创建两个不同的 json 文件。这是一个 json 文件,我有:{
capabilities
:[{applicationName
:ONEPLUS A3003
,browserName
:ONEPLUS A3003
,platformName
:ANDROID
,maxInstances
:1}] ,configuration
:{cleanUpCycle
:2000,timeout
:30000,proxy
:“org.openqa.grid.selenium.proxy.DefaultRemoteProxy”,host
:“127.0.0.1”,port
: 4723,maxSession
:1,register
:true,registerCycle
:5000,hubPort
:4444,hubHost
:“你的 ip 地址”}}将上述文件保存为 jasonFile1。
appium –nodeconfig C:/richa/jasonfile1.json -p 4723 -bp 4724 -U xxxx
i)注意你需要提供 json 文件的绝对 pasth 位于 ii)端口为 4723 iii)Bootstrap 端口为 4724 iv)-U 例如我给出的为 xxxx
你可以找到设备 ID 为 - >你的手机 - >设置 - >状态 - >序列号你也可以执行 adb device
并检查此设备 ID。
然后它将使用一个设备创建 Selenium Grid。
现在再次运行第二个 json 文件,你将获得 appium 启动这是第二个 json 文件:
{capabilities
:[{applicationName
:Lenovo K50a40
,browserName
:Lenovo K50a40
,platformName
:ANDROID
,maxInstances
:1}],configuration
:{cleanUpCycle
: 2000,超时:30000,代理:“org.openqa.grid.selenium.proxy.DefaultRemoteProxy”,主机:“127.0.0.1”,端口:4730,maxSession
:1,“注册“:true,”registerCycle“:5000,”hubPort“:4444,”hubHost“:”你的 ip 地址“}}将上述文件保存为 jasonFile2.json
使用 Lenovo Mobile 启动第二个节点。appium –nodeconfig C:/ richa / jasonFile2.json -p 4730 -bp 4731 -U xxxx
Selenium Grid 看起来像这样
3)创建 TestNG 并行执行方法来运行测试。
- >请注意设备名称的值将是你之前提供的 udid。你可以通过在命令提示符下运行 adb 设备来获取它。
现在创建 SearchHotelTestCase.Java,如下所示:package com.trivago.TestCases;
import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.TimeUnit;
import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Parameters; import org.testng.annotations.Test;
import com.trivago.pages.LocaleSelectionPage; import com.trivago.pages.SearchLocation; import com.trivago.pages.SplashScreenPage;
import io.appium.java_client.MobileElement; import io.appium.java_client.android.AndroidDriver;
公共类 SearchHotelTestCase {private AndroidDriver driver;
@Parameters({“deviceName _”,“platformVersion _”,“applicationName_”})@BeforeMethod public void beforeMethod(String deviceName_,String platformVersion_,String applicationName_)抛出 MalformedURLException,InterruptedException {
DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(deviceName
,deviceName_); capabilities.setCapability(platformVersion
,platformVersion_); capabilities.setCapability(platformName
,Android
); capabilities.setCapability(applicationName
,applicationName_); capabilities.setCapability(app
,“/ Users /richa.b.shrivastava / Download / com.trivago_2017-04-28.apk”); capabilities.setCapability(appPackage
,“com.trivago”); capabilities.setCapability(appActivity
,“com.trivago.activities.SplashActivity”);
URL url = new URL(“ http://0.0.0.0:4723/wd/hub/ ”); System.out.println(“在 webdriver 之前”); driver = new AndroidDriver(url, capabilities); System.out.println(“在 webdriver 之后”); driver.manage()
。timeouts()。implicitlyWait(10,TimeUnit.SECONDS); 了 Thread.sleep(4000); }
@Test public void SearchHotel()
{//创建页面类 LocaleSelectionPage 的对象 localeSelectionPage = new LocaleSelectionPage(driver); SplashScreenPage splashScreenPage =新的 SplashScreenPage(驱动程序); SearchLocation searchLocation = new SearchLocation(driver);
//调用页面类的方法 localeSelectionPage.selectLocale(); splashScreenPage.clickSplashSearchText(); searchLocation.inputSearchText( 巴黎); searchLocation.selectSuggestions(“艾菲尔铁塔,巴黎”);
}
}