0

我已经在 selenium webdriver 中编写了一个程序,但是对于我的下一个项目,我想通过使用更好的编程技术使其更易于维护。我要关注的主要部分是启动浏览器一次(1 个会话)并运行 10 个不同的测试然后关闭浏览器,但我不知道该怎么做。使用 JUnit,这就是我目前的项目布局方式:

package example1;
public class TestBase { //main class

@Before
public void setup () {
//launch browser
}

@Test //all test run here
public void test1(){
login();
homepage();
}

@After
public void teardown(){
//close browser
}
}

package example1;
public class login(){
//do some action
}

package example1;
public class homepage(){
//do some action
}

package example1;
public class storeMethods(){
//all methods are stored which are then called by different classes
}

我不确定 @Test 注释是否应该在主类中,或者它是否应该在它自己的类中(login()、homepage()),因为我在某处读到测试不应该相互依赖。我在java方面没有太多经验,但我非常愿意学习。我只需要一些关于最佳实践以及如何编写良好的可维护测试的指导,所以如果有人可以帮助我或指出我正确的方向,那么我将非常感激。

4

2 回答 2

1

我建议重用浏览器并没有遵循更好的自动化编程实践。

重用浏览器将导致不稳定和不可靠的测试,并具有测试间依赖关系。

在我看来,进行原子自包含测试要好得多。

如果测试运行时是一个问题,请查看并行性并使用 selenium 网格

于 2013-09-04T12:41:02.810 回答
1

虽然 Robbie Wareham 说的是正确的,但重用浏览器并不是一个好主意,您说您的总体目标是可维护性。

我发现提高可维护性的技术是页面对象模式,它具有与之交互的单独功能。

页面对象模式将选择器与其余代码分开。这样,如果页面上的元素发生更改,并且您的测试使用该元素 5 次......您只需在 1 个位置更改您的代码。包含 isLoaded() 也是标准的,该函数可用于识别您是否已经在所需的页面上,这样您就不会重新加载页面。

我还建议您的测试不要直接处理您创建的页面。如果你有一个工具栏,你必须使用它去 X 页面......然后工具栏发生了变化,所以你想要的链接在一个子菜单中,那么每次在你的测试中你使用那个链接,你就必须更改方法以单击该链接。 创建与页面交互的 selenium 命令集将使您的测试更高级且易于阅读。

于 2013-09-04T14:05:27.007 回答