3

背景:

我创建了一个基本的游乐场项目,其中包含:

  1. 一个 testLogin.java 文件,其中包含
    :testng 包导入 (org.testng.*)
    b. selenium webdriver 导入 (org.openqa.selenium.*)
    c. 5 种带有 testng 注释的测试方法:
  1. @Test(groups={"init"}) public void openURL()
    包含 webdriver 代码以启动 webdriver 并打开具有给定 url 的 chrome >instance。

  2. @Test(dependsOnGroups={"init"}) public void testLogin()
    包含 webdriver 代码以:
    1. 找到用户名密码文本输入元素,从属性文件输入用户名密码。
    2. 找到“登录”按钮并单击按钮登录
    3. 如果其他人已经使用凭据登录,则管理强制登录方案。

  3. @Test(dependsOnMethods={"testLogin"}) public void testPatientsScheduleList()
    包含用于检查是否已安排任何患者的 webdriver 代码。如果是,则获取名称并在控制台中显示。

  4. @Test() public void testLogout()
    包含用于定位注销按钮并单击该按钮以注销应用程序的 webdriver 代码。

  5. @AfterTest() public void closeConnection()
    包含用于处理 webdriver 对象并关闭 chrome 实例的 webdriver 代码。

目前,我只是从 ANT 运行包装为 testng 方法的测试脚本,并生成一个 testng-xslt 报告。

问题:

1.在测试方法中对webdriver脚本的每一行代码进行验证:

我知道:
1. Selenium webdriver 脚本包含 API 方法(findElement() 和其他。)由于它们执行的默认断言/验证而引发异常。当测试方法失败时,这些异常会显示在生成的报告中。
2. TestNG 提供了 Assert 类,它有许多断言方法,但我还没有弄清楚如何使用它们对 webdriver 脚本的每一行代码执行验证/断言。我尝试在每一行 webdriver 脚本代码之后添加断言方法。输出中出现的只是测试方法的 AssertionError 异常。

2.由于try..catch块而导致通过的某个测试方法失败。
如果我在一组 2 个或更多测试驱动脚本步骤周围使用 try catch 块,并且如果测试用例在任何步骤(脚本行)中失败,则 try..catch 块会处理它,从而显示测试方法作为执行报告中的“通过”,实际上失败了。

3. 创建一个自定义报告,该报告将显示所需的测试执行结果,而不是堆栈跟踪!
当我执行上述脚本时,会生成一个 testng-xslt 报告,其中包含测试套件(在 testng.xml 中配置)中每个测试方法的通过/失败状态。测试结果只告诉我测试方法是通过还是失败,并提供异常的堆栈跟踪,但实际上并没有提供任何有用的信息。我不想要这种抽象级别的测试执行结果,而是:

姓名 | 开始 | 持续时间 | 真正出了什么问题(失败)


任何人都可以建议/给出一些关于:
1.如何在测试方法中对webdriver脚本的每一行代码执行验证/断言而不在每个脚本行之后编写断言?
2.我怎样才能使某个由于 try catch 块而通过的测试方法失败?
3.如何自定义故障报告,以便我可以向 testng 的报告实用程序发送一个失败结果,如“预期元素”按钮,id 为“bnt12”,但在测试方法的第 3 步未找到该元素”?
4.在 testng-xslt 报告中,我想显示测试方法中发生故障的确切位置。因此,例如,如果我的测试方法因测试方法第 3 行的 webelement = driver.findElement() 而失败,我想在“What-really-went-wrong”的测试报告中显示此问题柱子。我已阅读有关 testng testlisteners TestListenerAdapter / ITestListener/ IReporter 的信息,但在检查 testng 的 javadocs 后我不明白如何使用它们。
5.另外,一旦我完成了自定义测试报告,我必须实现 PageObject 模式。在页面对象模式中执行断言的正确位置在哪里?断言应该写在页面对象测试方法中还是写在将使用 PageObject 类的更高级别的测试方法中?

PS:我对 testng 框架和 webdriver 脚本完全陌生。如果帖子中有任何技术错误或观察错误,请多多包涵。

4

2 回答 2

2

如何在测试方法中对 webdriver 脚本的每一行代码执行验证/断言,而不在每个脚本行之后编写断言?

我不这么认为。进行比较的是断言。所以你需要它。

由于 try catch 块而通过的某个测试方法如何失败?

try-catch 将掩盖断言失败。(因为在断言失败时,会抛出断言异常,所以如果你的 catch 块像 ( catch(Exception e)) 断言失败不会逃脱 catch 块。

如何自定义故障报告,以便我可以向 testng 的报告实用程序发送故障结果,例如“预期元素”按钮,ID 为“bnt12”,但在测试方法的第 3 步未找到该元素”?

您需要使用测试侦听器。TestNG TestListenerAdapter 是一个好的开始

此外,一旦我完成了自定义测试报告,我就必须实现 PageObject 模式。在页面对象模式中执行断言的正确位置在哪里?断言应该写在页面对象测试方法中还是写在将使用 PageObject 类的更高级别的测试方法中?

我个人的选择是在测试方法中使用断言,因为这是我们进行实际测试的地方。页面对象包含用于在网页内导航的脚本。

于 2014-06-23T11:35:44.727 回答
0

如何自定义故障报告,以便我可以向 testng 的报告实用程序发送故障结果,例如“预期元素”按钮,ID 为“bnt12”,但在测试方法的第 3 步未找到该元素”?

您可以使用范围报告和 testng 侦听器类(在此类中使用onTestFailure方法来自定义您的失败报告)。

于 2020-01-23T09:32:15.027 回答