使用Selenium 2.0 WebDriver的实践应用

7

我希望在JUnit中编写Selenium测试用例,并在多个浏览器中测试我的项目,我希望利用所有Selenium驱动程序都实现相同接口的优势。

每个测试用例应该长这样:

package fm;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import static org.junit.Assert.*;

public class HomepageTest {

    @Test
    public void testTitle(WebDriver driver) {
        driver.get("http://localhost/");
        assertEquals("Foo", driver.getTitle());
    }

    @Test
    public void testSearchForm(WebDriver driver) {
        //...
    }

}

传递的WebDriver实现应在某个地方进行集中控制。我可能需要覆盖一些JUnit行为,希望这是可能的。
我希望以这种方式做到以下两点:
1. 代码重复:如果每个测试用例都在@Before中初始化所有测试的浏览器,那么测试套件将有很多重复的代码,难以维护。
2. 测试套件速度:如果我对顺序和传递的WebDriver实现进行了集中控制,我可以轻松管理打开例如Firefox,在其中运行所有测试用例,关闭它并打开下一个浏览器。如果每个测试用例都要自己打开和关闭浏览器,将会增加每次测试运行的时间。
有人有想法该如何做吗?谢谢。
3个回答

2
在Selenium项目中,我们使用AbstractDriverTestCase.java注入所需的内容,然后我们的构建调用浏览器,使测试在其中运行。
看一下我们的代码库,获取一些灵感吧!

1
请查看ISFW,它支持selenium webdriver/remote webdriver以及传统的(selenium1)rc方式。您需要使用常规的selenium api编写代码,例如:
selenium.open(url);
selenium.type("loc", "text to type");
selenium.submit("loc");

这里是工作演示。根据您的要求设置浏览器字符串。 FW支持selenium传统方式和selenium 2 webdriver。您需要在应用程序属性中设置适当的浏览器字符串。以下是Firefox的不同浏览器配置:

  • *firefox - 必须在配置的主机/端口上运行所需的selenium服务器,如果未找到,则fw将检查/启动locahost/port上的一个
  • firefoxDriver - 将直接使用firefox web driver运行,而无需selenium服务器
  • firefoxRemoteDriver - 必须在配置的主机/端口上运行所需的selenium服务器,如果未找到,则fw将检查/启动locahost/port上的一个,它将在主机上使用firefox web driver运行测试

同样适用于IE-*iexplore,*iehta,iexplorerDriver,iexplorerRemoteDriver等。


0

我用一个静态类来控制webdriver,所有需要相同webdriver的测试都从那里获取。这对于运行多个需要使用相同会话的测试非常有帮助。而且所有测试都在一个浏览器中运行,因此不是每个测试都打开一个新的浏览器实例。

也许你应该看看testNG。我发现testNG更适合与selenium一起使用,因为它不太专注于独立测试。它提供了很多有用的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接