背景:
我创建了一个基本的游乐场项目,其中包含:
- 一个 testLogin.java 文件,其中包含
:testng 包导入 (org.testng.*)
b. selenium webdriver 导入 (org.openqa.selenium.*)
c. 5 种带有 testng 注释的测试方法:
@Test(groups={"init"}) public void openURL()
包含 webdriver 代码以启动 webdriver 并打开具有给定 url 的 chrome >instance。@Test(dependsOnGroups={"init"}) public void testLogin()
包含 webdriver 代码以:
1. 找到用户名密码文本输入元素,从属性文件输入用户名密码。
2. 找到“登录”按钮并单击按钮登录
3. 如果其他人已经使用凭据登录,则管理强制登录方案。@Test(dependsOnMethods={"testLogin"}) public void testPatientsScheduleList()
包含用于检查是否已安排任何患者的 webdriver 代码。如果是,则获取名称并在控制台中显示。@Test() public void testLogout()
包含用于定位注销按钮并单击该按钮以注销应用程序的 webdriver 代码。@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 脚本完全陌生。如果帖子中有任何技术错误或观察错误,请多多包涵。