16

我只是想从运行 Selenium ( http://selenium.openqa.org )的人那里得到一些意见。我对 WaTiN 有很多经验,甚至为它写了一个录音套件。我让它生成了一些结构良好的代码,但只由我维护,我的公司似乎几乎放弃了它。

如果你运行过 selenium,你是否取得了很大的成功?

我将使用 .NET 3.5,Selenium 可以很好地使用它吗?

生成的代码是干净的还是只是所有交互的列表?(http://blogs.conchango.com/richardgriffin/archive/2006/11/14/Testing-Design-Pattern-for-using-WATiR_2F00_N.aspx

分布式测试套件的公平性如何?

对系统的任何其他抱怨或赞美将不胜感激!

4

5 回答 5

27

如果您使用Selenium IDE生成代码,那么您只需获取 selenium 将执行的每个操作的列表。对我来说,Selenium IDE 是开始或进行快速“试看”测试的好方法。但是,当您考虑可维护性和更具可读性的代码时,您必须编写自己的代码。

实现良好 selenium 代码的一个好方法是使用页面对象模式,以使代码代表您的导航流。这是我在Coding Dojo Floripa(来自巴西)中看到的一个很好的例子:

public class GoogleTest {

    private Selenium selenium;

    @Before
    public void setUp() throws Exception {
            selenium = new DefaultSelenium("localhost", 4444, "*firefox",
                            "http://www.google.com/webhp?hl=en");
            selenium.start();
    }

    @Test
    public void codingDojoShouldBeInFirstPageOfResults() {
            GoogleHomePage home = new GoogleHomePage(selenium);
            GoogleSearchResults searchResults = home.searchFor("coding dojo");
            String firstEntry = searchResults.getResult(0);
            assertEquals("Coding Dojo Wiki: FrontPage", firstEntry);
    }

    @After
    public void tearDown() throws Exception {
            selenium.stop();
    }

}


public class GoogleHomePage {

    private final Selenium selenium;

    public GoogleHomePage(Selenium selenium) {
            this.selenium = selenium;
            this.selenium.open("http://www.google.com/webhp?hl=en");
            if (!"Google".equals(selenium.getTitle())) {
                    throw new IllegalStateException("Not the Google Home Page");
            }
    }

    public GoogleSearchResults searchFor(String string) {
            selenium.type("q", string);
            selenium.click("btnG");
            selenium.waitForPageToLoad("5000");
            return new GoogleSearchResults(string, selenium);
    }
}

public class GoogleSearchResults {

    private final Selenium selenium;

    public GoogleSearchResults(String string, Selenium selenium) {
            this.selenium = selenium;
            if (!(string + " - Google Search").equals(selenium.getTitle())) {
                    throw new IllegalStateException(
                                    "This is not the Google Results Page");
            }
    }

    public String getResult(int i) {
            String nameXPath = "xpath=id('res')/div[1]/div[" + (i + 1) + "]/h2/a";
            return selenium.getText(nameXPath);
    }
}

希望有帮助

于 2008-09-19T05:53:30.800 回答
7

我正在使用 Selenium Remote Control 来测试 ASP.Net 应用程序(这也是我假设您也将瞄准的目标),并且效果很好。

如果您从未使用过 Selenium,请观看一些有关使用 Selenium IDE的截屏视频。这将使您对“Selenium”的工作原理有一个很好的了解。IDE 是一个 firefox 插件,基本上可以让您开发快速的录制和播放测试。不过,对于较大的测试套件或编写真正可维护的测试,我建议使用 Selenium Remote Control。(如果您刚刚开始,IDE 非常棒。)

Selenium Remote Control允许您使用自己喜欢的语言和单元测试框架来驱动 Web 浏览器以执行您的测试。如果您最熟悉 C#/NUnit,您可以用这种方式编写测试并使用您喜欢的所有 NUnit 好东西。(例如,Test-Driven.net 插件)。此外,由于您的测试是用高级语言编写的,因此您可以执行诸如从特定测试类继承之类的事情,您可以使用它来使您的实际测试方法代码更加简洁。(或者至少这就是我编写测试的方式。它让我可以测试复杂的场景,使我的测试方法的行数保持在合理的数量。)

你提到分布式测试。不幸的是,我还没有找到将Selenium Grid项目与 NUnit 一起使用的方法。Selenium Grid 允许您在许多不同的机器和浏览器实例上执行您的测试套件。因此,您可以将负载分散到一台机器或多台机器上的四个 Grid 实例上(即一次在四个不同的浏览器实例中运行),而不是一个接一个地运行 200 种测试方法(即串行)关于你想要得到的分布。

但是,如果您使用 Java 或 PHP 编写测试,您可能会有更好的运气。我希望随着 NUnit2.5 的发布通过 NUnit 可以使用它,其中将包括用于并行测试的 pNUnit。

如果您对 selenium 有任何其他问题,请澄清您最初的问题,我很乐意为您提供帮助。(Selenium 只是我每天使用的工具之一,所以我喜欢帮助新人开始使用它......)

于 2008-09-19T17:35:44.207 回答
3

我从 Selenium IDE 和 Selenium Core 开始。这些绝对是让您入门的好工具。但它们不是很强大,因为您只能使用 Selenese,Selenium 的基于 HTML 的逐个命令语言。

现在我将 Selenium Remote Control 与 Ruby 驱动程序一起使用,它允许我利用 Ruby 提供的功能。我测试了许多环境:Windows 2000、XP、Vista、Mac 10.4/10.5,对于每个适用的环境,Safari 2/3、Firefox 2/3、Internet Explorer 6/7。

Selenium 声称与所有这些操作系统和浏览器兼容,尽管我目前在使用 Internet Explorer 时遇到了问题(实际上,我在 StackOverflow 上的第一个问题是关于这个的)。但我不知道有任何其他工具如此强大且适用于如此多的平台。

Selenium 遇到的最大问题是 DOM 解析。JavaScript 的 childNodes 不可靠,因为 Safari/Firefox 会忽略空格和注释节点,而 Internet Explorer 则不会。Internet Explorer 中的 XPath 比 SF/FF 慢 10-20 倍。innerHTML 在 IE 中并不总是可靠的。

于 2008-09-26T19:46:28.817 回答
1

Selenium 是相当不错的工具,但有几点需要注意:

  • Selenium IDE 和 Selenium 核心不共享 100% 相同的功能。例如,IDE 支持右键单击,但当前的核心版本没有。但是,使用他们存储库中的更新版本可以解决这个问题。

  • 如果是 ext js、gwt 等,请确保您的显示元素具有正确的 ID,而不是自动生成(随机)的 ID。

  • 维护测试用例。我见过在 Selenium 测试和良好覆盖率上投入大量精力的案例。后来测试开始失败,因为创建它们的人正忙于其他任务而没有其他人想碰它们。但这是管理问题,而不是 Selenium。

于 2008-10-17T08:45:58.200 回答
1

我是 Selenium 的忠实粉丝。不过,提前了解的一个主要问题是 Selenium IDE 在弹出窗口方面存在很多问题。这些问题不会在 Selenium RC 中持续存在,但它会让开发变得有点头疼。

于 2009-07-22T22:21:22.357 回答