尝试使用TestNG和Selenium Grid 2并行运行测试时似乎遇到了问题。
虽然打开了正确数量的浏览器以匹配我正在运行的测试数量,但所有测试的所有指令都会被触发到同一个浏览器窗口。例如,每个测试将打开一个页面并尝试登录。将打开四个浏览器窗口,但一个浏览器窗口将导航到登录页面四次,然后输入用户名4次,而其余的浏览器窗口仍然不活动的。
以下是我开始网格的方式:
java -jar selenium-server-standalone-28.0.jar -role hub
java -jar selenium-server-standalone-28.0.jar -webdriver.chrome.driver="*location*/chromedriver_mac" -role node
这是xml套件的设置方式:
<suite name="testng" verbose="1" parallel="classes">
<test name="chrome">
<packages>
<package name="login"/>
<package name="lists"/>
</packages>
</test>
</suite>
这是一个如何布置测试的例子:
public class login_logout extends TestBase {
@Test
public void login(){
//initiates login page object and call super user login
LoginPage login = LoginPage.navigateTo(driver, base_url)
LoggedInPage loggedIn = login.superuserlogin();
}
}
测试基地的布局如下:
public class TestBase {
public static WebDriver driver;
public static DesiredCapabilitiess capabilities;
@BeforeClass
public static void setUp(){
base_url = "*login page url*;
capabilities = DesiredCapabilities.chrome();
driver = new RemoteWebDriver(capabilities);
driver.get(base_url);
}
}
这可能是一件非常明显的事情,我很遗憾,但任何帮助都会受到赞赏。
提前致谢。
答案 0 :(得分:4)
驱动程序对象是静态的。所以你有4个初始化发生和4个浏览器启动但驱动程序是静态的,它只包含对最后一个初始化浏览器的引用,因此所有命令都是针对同一个驱动程序执行的。您可以尝试为并行运行探索Threadlocal对象。
答案 1 :(得分:0)
从我的角度来看,您在选择WebDriver和TestNG时做出了正确的决定。 但由于这些是非常强大的工具,因此您应该了解一些基础知识。
在第一步中,获得一些编程经验非常重要。
其次,您可以添加一些特定的技巧。
为什么不在每个测试类中初始化WebDriver(在构造函数或@BeforeClass中)?
稍后,您还可以使用@DataProvider和@Factory模式进行配置。
那太酷了!