selenium - 如何让 Selenium 和 TestNG 打开一个浏览器在多个类中运行测试

标签 selenium testng

我正在使用 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/

相关文章:

java - 我可以通过 Java 在 Selenium 中使用没有 ExpectedCondition 的 WebDriverWait 吗?

java - Webdriver 不支持以其他用户身份运行

html - 如何在 Selenium 中找到元素

java - TestNG:如何从DataProvider获取Factory即将创建的类

testng - 有没有办法拦截 dataprovider 调用并更改它们的返回值?

javascript - 执行 javascript 更改 webelement 时找不到变量错误

python - 社交交换机器人卡在按钮单击处

java - 如何使用 Rest assured 测试需要身份验证的 Rest API

java - 运行特定测试类的maven命令得到org.testng.TestNGException

java - 是否有用于测试 RESTful API 的 Java 包?