任何人都可以帮助我,因为我真的不明白:
那是我的TestNG文件:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="GRID SAMPLE TEST" parallel="tests" verbose="3" thread-count="2">
<test name="GRID EXECUTION WITH CHROME" parallel="classes" verbose="3" thread-count="2">
<parameter name ="browserType" value="chrome"/>
<classes>
<class name ="Tests"/>
<class name ="Tests2"/>
</classes>
</test>
<test name="GRID EXECUTION WITH FF" parallel="classes" verbose="3" thread-count="2">
<parameter name ="browserType" value="firefox"/>
<classes>
<class name ="Tests"/>
<class name ="Tests2"/>
</classes>
</test>
</suite>
那是我的setUp方法:
RegistrationPage rp;
@BeforeClass
@Parameters("browserType")
public void setUp(String browserType) throws InterruptedException {
rp = new RegistrationPage();
if (browserType.equalsIgnoreCase("firefox")) {
Configuration.browser = "firefox";
} else if (browserType.equalsIgnoreCase("chrome")){
Configuration.browser = "chrome";
}
Configuration.baseUrl = "http://demoqa.com/registration/";
}
我正在使用Selenide,它是Selenium的包装,但这不是重点。 关键是我希望对chrome(此处为2)和firefox(至此处)运行相同的测试。 当我在调试时运行它们时,一切正常,在FF上进行了2个测试,在CHROME上进行了另外2个测试。但是,当我在没有调试的情况下正常运行它们(右键单击xml并以testNG的身份运行)时,我的所有测试都仅在FF(4)或仅在CHROME(4)上完成!
谁能解释为什么?我在这里做错了吗?
答案 0 :(得分:1)
当前失败的原因是-您尝试在使用XML时并行运行测试(与Debug模式相反,我认为该模式在单个线程中运行)。
两个测试(来自TestNG XML的test
个元素)几乎同时执行,都设置了Configuration.browser
字段,该字段定义为 static ,这意味着-仅其中一个实例存在,并在以后执行的任何线程中被覆盖。
可以通过依次执行测试或手动为每个线程创建一个单独的WebDriver实例(根据参数browserType
)并使用WebDriverRunner.setWebDriver()
而不是{{1 }}。
例如:
Configuration.browser
希望这会有所帮助。
答案 1 :(得分:0)
使用:
@BeforeTest
注释,然后它将使用您在testNG.xml的<test>
标记中提到的其他浏览器