我正在使用 Selenium 和 TestNG 来测试网站。我使用 Selenium IDE 创建了测试并将它们导出到 TestNG,每个测试都是类中的一个方法。例如,
对于登录测试,有一个 Login 类,它具有 testLogin()、testLogin2() 等方法 对于注册测试,有一个 Signup 类,具有 testSignup()、testSignup2() 等方法
我正在使用 Ant 来运行测试,该测试工作正常,只是每个类将打开一个浏览器,然后运行其方法,例如,如果我有五个类,那么五个浏览器将同时打开,然后运行测试。
我想要的是让 Ant/Selenium/TestNG 只需打开一个浏览器,然后在我在 testng.xml 中指定的所有类中运行所有测试(在同一浏览器中)。使用上面的示例,我希望打开一个浏览器,然后运行 testLogin()、testLogin2()、testSignup()、testSignup2()。 如果无法实现这一点,那么我想打开一个浏览器,运行一个类中的所有测试,然后关闭浏览器,然后打开另一个浏览器,然后运行下一个类中的一组测试方法。
任何帮助表示赞赏。提前致谢。
最佳答案
今天我找到了适合我的答案。请给我几分钟时间来收集所有代码示例:)
初始化.java
//base class that will be called before all tests
@Test(groups = "init")
public class Init{
DefaultSelenium browser;
public void start(ITestContext itc){
browser = (DefaultSelenium) itc.getAttribute("browser");
browser.open("url");
browser.click("xpath");
}
}
TemplateForClasses.java
/* - all public methods will be tests
* - all tests will be called after group init
* - just before suite will start we will start 1 browser instance
*/
@Test(dependsOnGroup="init")
public class TemplateForClasses{
DefaultSelenium browser;
@BeforeSuite
public void startBrowser(ITestContext itc){
browser = new DefaultSelenium(host,port,browser_type,url);
itc.setAttribute("browser",browser);
browser.start();
}
@AfterSuite
public void stopBrowser(ITestContext itc){
browser = (DefaultSelenium) itc.getAttribute("browser");
browser.stop();
}
//any other: @Before, @After methods
}
FirstGroupOfTests.java
//all tests classes will inherit preferences set in TemplateForClasses
public class FirstGroupOfTests extends TemplateForClasses{
public void FirstTest(ITestContext itc){
browser = (DefaultSelenium) itc.getAttribute("browser");
//browser.click("start");
}
}
想法:
- 仅启动一次浏览器进行测试
- 在所有其他测试之前运行(isBrowserRunning)
- 引用单个测试中的浏览器
这段代码已经过测试,但目前我是从我的脑海中得出的,所以明天我可能会对其进行编辑以使其更加准确。
更新: 此结果基于 testng.org 文档 + 我在 stackoverflow 上提出的一些问题 + 在多个论坛/群组中找到的一些答案
我必须补充一点,我正在以编程方式运行 testng,并且正在动态生成 xml(就像在 Documentation.org 上完成的那样)。我在一个包中使用它,我将包添加到 xml,仅包含 Init 类 + 从 TemplateForClasses 继承的类。如果您需要该 xml,请告诉我。
关于selenium - 如何让 Selenium 和 TestNG 打开一个浏览器在多个类中运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1149080/