如何将代码重用添加到Selenium测试中?
以下是我正在处理的情况:如何将代码重用添加到Selenium测试中?,selenium,selenium-rc,Selenium,Selenium Rc,以下是我正在处理的情况: Selenium中的构建测试 正确运行所有测试(在Firefox中) 将所有测试导出到MSTest(以便每个测试都可以在IE、Chrome和FF中运行) 如果需要修改任何测试,请在Selenium IDE中进行编辑 所以这是一个非常单向的工作流程。不过,我现在想做一点自动化。例如,我希望每个测试都在两个帐户下运行。我遇到了一个维修问题。如果我想在两个帐户下运行6个测试,那么在Selenium IDE测试中突然需要12个测试。编辑太多了。但很多代码都是完全相同的 如何
- Selenium中的构建测试
- 正确运行所有测试(在Firefox中)
- 将所有测试导出到MSTest(以便每个测试都可以在IE、Chrome和FF中运行)
- 如果需要修改任何测试,请在Selenium IDE中进行编辑
如何在测试之间共享Selenium测试块?我是否应该第一次使用Selenium IDE开发测试,然后再也不使用它(之后只在VS中进行编辑) 从IDE导出Selenium代码后,它是非常线性的 例如(忽略语法): 这是登录页面。您的每个测试都必须使用它。你应该把它重构成一个方法
someTestMethod(){
selenium.open("http://someLoginPage.com");
String username = "foo";
String password = "bar";
performLogin(username, password);
}
performLogin(String username, String password){
selenium.type("usernameField", username);
selenium.type("passwordField", password);
selenium.click("loginButton");
selenium.waitForPageToLoad("30000");
assertTrue(selenium.isTextPresent("Welcome * foo"));
}
performLogin()
方法不必与测试代码本身位于同一文件中。您可以使用方法为它创建一个单独的类,并在测试之间共享它
我们的类对应于UI上的某些功能。例如,我们有很多方法在我们的应用程序中搜索。帮助您实现搜索功能的所有方法都将位于SearchUtil类中
以类似方式组织测试将为您带来以下优势:
- 如果用户界面发生变化(字段的id),您可以转到您的one方法,更新id,就可以继续了
- 如果逻辑流程发生变化,您也只有一个地方可以更新
- 要测试您的更改是否有效,您只需运行其中一个测试来验证。所有其他测试都使用相同的代码,因此应该可以工作李>
- 当您查看代码时,会有更多的表达能力。使用命名良好的方法,可以创建更高级别的抽象,更易于阅读和理解李>
- 灵活且可扩展可能性是无限的。在这一点上,您可以使用条件、循环、异常,您可以自己做报告,等等李>
祝你好运关于>强>代码重用< /强>:需要考虑的两个方面
- IDE测试总是会有大量代码从一个测试复制到另一个测试,有时甚至是在一个测试中。这就是beast的本质
- 在代码中,我可以使测试用例更“用户友好”,也就是说,我可以将神秘的定位器封装在有意义的命名属性或方法中,这样就可以更清楚地了解测试用例在做什么
- 使用代码而不是IDE提供了更大的灵活性
verifyText "//form[@id='aspnetForm']/div[2]/div/div[2]/div[1]/span" Home
生成此代码块:
try
{
Assert.AreEqual("Home",
selenium.GetText("//form[@id='aspnetForm']/div[2]/div/div[2]/div[1]/span"));
}
catch (AssertionException e)
{
verificationErrors.Append(e.Message);
}
每个后续的verifyText命令都会生成一个相同的代码块,只是两个参数不同
我对这种刺鼻的代码气味的解决方案是开发Selenium Sushi,这是一个Visual Studio C#项目模板和库,可以消除大部分(如果不是全部)重复。使用该库,我只需编写一行代码,以匹配IDE测试用例中的原始代码行:
Verify.AreEqual("Home",
selenium.GetText("//form[@id='aspnetForm']/div[2]/div/div[2]/div[1]/span"));
2011年2月,我在Simple-Talk.com上发表了一篇内容广泛的文章,介绍了这一点。你也可以放一些片段或一行,例如
note( "now on page: " . $sel->get_location() . ", " . $sel->get_title() ;
进入IDE的“代码片段”集合(我使用Eclipse)
这不是真正的重用,但它对我来说适用于一次性测试脚本或现有测试脚本的快速增强。真的吗?我不能让testA和testB使用相同的“远程控制”实例,或者换句话说,在测试之间使用相同的登录会话?真的吗?
note( "now on page: " . $sel->get_location() . ", " . $sel->get_title() ;