java - ExtentReports - 单独的驱动程序实例的单独步骤

标签 java selenium webdriver extentreports

我有一个 Selenium/Java 项目,我们正在其中使用 ExtentReports。我们使用 PageFactory 模型,并有一个 BasePageFactory 负责所有测试准备工作。

Before 方法大致如下所示:

@Before
public void beforeTest() throws MalformedURLException {
    this.driver = DriverBase.getDriver();
    driver.manage().window().maximize();
    Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
    browserName = cap.getBrowserName();
    ExtentReportsWrapper.startTest(getTestName(), "Browser: " + browserName + "<br>" + getDescription());
}

ExtentReports 的包装器负责处理报告,它是从 junit TestWatcher 调用的。我们还使用此方法来发布“信息消息”——这是测试步骤。这些通常放置在 PageObject 方法中 - 每次该方法执行手动测试人员将执行的步骤(单击、sendKeys 等)

public static void postInfoMessage(String message) {
    getRunningTest().log(Status.INFO, message + ".");
}

我们最近开始编写打开多个驱动程序实例的测试。这样做的原因是测试,例如用户权限。我们希望在不同的实例中执行此操作,以避免必须一直登录和退出来检查权限。相反,一名用户在一个浏览器中更改权限,而另一位用户在第二个浏览器中尝试这些权限。

我的问题是 ExtentReports,因为它们将所有步骤混合在一起,因为报告实例绑定(bind)到 BasePageFactory 而不是每个浏览器实例。

简单测试示例,其中在一个实例中创建新用户,然后在另一个实例中登录:

    @Test
public void run() throws ItemNotFoundException {
    UserFacade userFacade = new UserFacade(driver);
    UserParams userParams = new UserParams();
    userParams.setLanguage(Language.ENGLISH);
    UserData userData = userFacade.createNewUser(userParams); //contains multiple postInfoMessage()

    WebDriver newDriver = this.getNewWebDriver();
    this.loginAnotherUser(newDriver, userParams.getNick(), userParams.getPassword()); //contains multiple postInfoMessage()

    this.closeWebDriver(newDriver);
    userFacade.deleteUser(this.userData); //contains multiple postInfoMessage()
}

正如您所看到的,有多个步骤作为信息消息打印在报告中,但是这些步骤是组合在一起的,如果测试很长,则很难说在什么情况下执行了哪些步骤。

UserFacade 使用来自测试类扩展的 BasePageFactory 的驱动程序实例。所有新实例都是通过 getNewWebDriver() 创建的

我看到 ExtentReports 提供了类似子节点的功能,但我无法找到有关它们的太多信息或制定任何可用的解决方案。如果有任何帮助,我将不胜感激。

最佳答案

我有一个简单的例子,我用它来学习范围报告(虽然不太成功)。也许有帮助...

    ExtentReports extent = new ExtentReports(Use your config);
    ExtentTest test = extent.startTest("Hello","Yeah"); 

    extent.loadConfig(ExtentReports.class, "extent-config.xml");

    test.log(LogStatus.PASS, "Before Step details");

    ExtentTest child1 = extent.startTest("Child 1");
    child1.log(LogStatus.INFO, "Info");
    child1.log(LogStatus.PASS, "Pass");

    ExtentTest child2 = extent.startTest("Child 2");
    child2.log(LogStatus.INFO, "Info");
    child2.log(LogStatus.PASS, "Pass");

    test.appendChild(child1).appendChild(child2);

    test.log(LogStatus.PASS, "After Step details");

    extent.endTest(test);
    extent.flush();     
    extent.close();

生成的报告中,可以看到子节点消息是单独添加的。 enter image description here

关于java - ExtentReports - 单独的驱动程序实例的单独步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49727221/

相关文章:

java - 单击按钮时如何启用文本字段?

javascript - SendKeys 仅将输入结束放在文本字段中

firefox - 在 Selenium 2 中使用现有的 Firefox 配置文件 - 不起作用?一个错误?

Selenium:该元素无法滚动到 View 中

c# - Selenium RemoteWebDriver 针对 ChromeDriver 的 Windows 服务

node.js - 如何使用 Node JS/Webdriver.io/Chimp 打印为 PDF?

java - 如何对这两个耦合类应用解耦

java - setWebViewClient 错误 - someView 中的 someView(context) 无法应用于 ()

java - 什么是NullPointerException,我该如何解决?

javascript - 为什么在编写 Protractor 测试时必须使用 browser.sleep