我有一个selenium Grid 3设置。 现在我有1个集线器+2个节点。 (1个本地节点,一个外部节点)。 当我运行我的测试时,它在本地节点上执行它(打开3个浏览器)。
我应该如何以及在哪里设置测试执行?如果我想在2个浏览器上运行所有测试,或者我想在2个浏览器上运行50/50测试? 我将附上我现有的代码。
package com.ParallelTest;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterClass;
public class Framework {
protected WebDriver driver;
@Parameters({ "platform","browser","version", "url" })
@BeforeClass(alwaysRun=true)
public void setup(String platform, String browser, String
version, String url) throws MalformedURLException
{
driver = getDriverInstance(platform, browser, version, url);
}
public static WebDriver getDriverInstance(String platform, String browser, String version, String url)
throws MalformedURLException {
String nodeURL = null;
*// IS this should be a Node or Hub path? Because right now it`s a node path. But if i want to use 2 different nodes? How i can implement it????*
String nodeURL = "http://10.11.161.249:5555/wd/hub";
WebDriver driver = null;
DesiredCapabilities caps = new DesiredCapabilities();
// Platforms
if (platform.equalsIgnoreCase("Windows")) {
caps.setPlatform(Platform.WINDOWS);
}
if (platform.equalsIgnoreCase("MAC")) {
caps.setPlatform(Platform.MAC);
}
// Browsers
if (browser.equalsIgnoreCase("chrome")) {
caps = DesiredCapabilities.chrome();
System.setProperty("webdriver.chrome.driver", "/Users/antonfiliptsov/Desktop/Grid/ChromeDriver/chromedriver");
}
if (browser.equalsIgnoreCase("firefox")) {
caps = DesiredCapabilities.firefox();
System.setProperty("webdriver.gecko.driver","/Users/antonfiliptsov/Desktop/Grid/Firefox/geckodriver");
}
if (browser.equalsIgnoreCase("safari")){
caps = DesiredCapabilities.safari();
}
// Version
caps.setVersion(version);
driver = new RemoteWebDriver(new URL(nodeURL), caps);
// Maximize the browser's window
// driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Open the Application
driver.get(url);
return driver;
}
@AfterClass
public void afterClass() {
driver.quit();
}
}
这是我的TestNG文件
<suite name="TestSuite" parallel="tests">
<test name="FireFox Test">
<parameters>
<parameter name="platform" value="MAC" />
<parameter name="browser" value="firefox" />
<parameter name="version" value="50.1.0" />
<parameter name="url" value="https://google.com" />
</parameters>
<classes>
<class name="com.test">
</class>
</classes>
</test>
<test name="Chrome Test">
<parameters>
<parameter name="platform" value="MAC" />
<parameter name="browser" value="chrome" />
<parameter name="version" value="55.0.2883.87" />
<parameter name="url" value="https://google.com" />
</parameters>
<classes>
<class name="com.test">
</class>
</classes>
</test>
<test name="Chrome Test 1">
<parameters>
<parameter name="platform" value="MAC" />
<parameter name="browser" value="chrome" />
<parameter name="version" value="55.0.2883.87" />
<parameter name="url" value="https://google.com" />
</parameters>
<classes>
<class name="com.test">
</class>
</classes>
</test>
</suite>
在我的测试中,我有字符串nodeURL =&#34; http://10.11.161.249:5555/wd/hub&#34;; 这指向我对特定节点的测试,但我如何设置指向不同节点的测试,或者在2个节点上并行运行?
答案 0 :(得分:1)
网格旨在执行以下角色:
因此,您应该将测试指向仅针对HUB URL运行而不是针对节点URL。 Grid将负责根据功能匹配将测试分发到节点。
错误
org.openqa.selenium.WebDriverException:转发新邮件时出错 session无法找到:Capabilities [{browserName = firefox, version = 55.0.2883.87,platform = ANY}]
基本上是网格告诉你的方式,你要求firefox
浏览器风格,其版本为55.0.2883.87
在任何平台上运行,但网格上没有任何注册到它的节点有这种能力。
这是正确的,因为您的节点配置JSON没有为firefox指定版本。
{
"capabilities": [
{
"browserName": "firefox",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "chrome",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "safari",
"maxInstances": 1,
"seleniumProtocol": "WebDriver"
}
],
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 5,
"port": 5555,
"register": true,
"registerCycle": 5000,
"hub": "http://192.168.1.115:4444",
"nodeStatusCheckTimeout": 5000,
"nodePolling": 5000,
"role": "node",
"unregisterIfStillDownAfter": 60000,
"downPollingLimit": 2,
"debug": false,
"servlets": [
],
"withoutServlets": [
],
"custom": {
}
}
要解决此问题,请
caps.setVersion(version);
方法(或)setup()
行
合并我的回复作为答案。