我有两个配置相同的节点(Win7,ie9)。我将testNG设置为同时对每个节点执行两次测试。 Selenium Grid同时打开两个浏览器(每个节点一个),但测试似乎只在一个浏览器中执行 - 用户名在同一个浏览器中输入两次。如果我设置thread-count=1
,则两个测试都会成功。
testNG测试套件xml文件:
<suite name="ExampleTest" parallel="tests" thread-count="2">
<test name="ExampleTest1">
<classes>
<class name="com.mycompany.testsuites.GridTest">
<methods>
<include name="test1"></include>
</methods>
</class>
</classes>
</test>
<test name="ExampleTest2">
<classes>
<class name="com.mycompany.testsuites.GridTest">
<methods>
<include name="test2"></include>
</methods>
</class>
</classes>
</test>
测试类GridTest:
public class GridTest {
private WebDriver driver;
String hubUrl = "http://12.11.14.15:4444/wd/hub";
@BeforeClass
public void beforeClass() throws MalformedURLException {
DesiredCapabilities capability = DesiredCapabilities.internetExplorer();
driver = new RemoteWebDriver(new URL(hubUrl), capability);
Page.setUp(driver); //Page is the base class of all page objects.
//The static setUp method assign a WebDriver object
//to static Page.driver, which shared by all pages.
}
@AfterClass
public void afterClass() {
driver.quit();
}
@Test
public void test1() {
driver.get("http://12.11.15.16");
LoginPage login = new LoginPage();
login.setUp(); // set up the Login Page
login.txtUsername().clear(); //clear the username input box
login.txtUsername().sendKeys("username"); // input user name
// ...
}
@Test
public void test2() {
driver.get("http://12.11.15.16");
LoginPage login = new LoginPage();
login.setUp();
login.txtUsername().clear();
login.txtUsername().sendKeys("username");
// ...
}
}
我使用selenium-server-standalone-2.41.0.jar作为集线器和节点。
答案 0 :(得分:7)
您看到的行为是正确的。
驱动程序是在@beforeClass中创建的,只执行一次,因此只创建了一个浏览器,这两个浏览器同时使用。
如果要更改为@beforeMethod,则每次测试都会创建一个浏览器但是这仍然会失败,因为正在使用相同的变量(驱动程序)来存储驱动程序实例。您会看到两个浏览器打开,但两个测试都在第二个中执行。
要在测试级别运行并行,那么您需要确保每个测试都是完全封装的,例如在自己的上下文中创建自己的驱动程序,这不允许您使用设置和拆除。
通常我总是在类级别运行并行,因为这种方法允许您仍然使用设置和拆除来创建驱动程序实例。我建议更改XML以运行parallel = classes。显然你必须拥有多个类,但我认为实际上你有两个以上的测试要运行!
答案 1 :(得分:0)
我会将 test1()放在一个类中,并将 test2()放在一个单独的类中,而不是尝试按方法并行化。然后,TestNG将没有任何问题。只需look at how I did it here。
如果您想要按方法分叉,可以完成,但在TestNG中进行配置要困难得多。我个人从来没有工作过。当我通过方法尝试并行时,它似乎对我没有任何作用......它的行为与类并行相同。我知道这只是一个配置问题。
事实上,我最近在这个领域进行了体验in this project,但我对它最终如何运作仍然不满意。
当然,您可能已经知道这一点,您需要确保已将网格节点配置为支持2个或更多线程,否则即使您明确分叉,它也会被限制为默认值(1?)。
答案 2 :(得分:0)
我遇到了同样的问题,因为它是一个静态WebDriver驱动程序。删除静态调用后,并行=&#34;测试&#34;工作得很好;
尝试删除您的私人电话并执行相同的配置。