我只是想听听运行 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)分布式测试套件的公平性如何?

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

有帮助吗?

解决方案

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

实现良好 selenium 代码的一个好方法是使用 页面对象模式 以代码代表您的导航流程的方式。这是我看到的一个很好的例子 编码道场 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);
    }
}

希望有帮助

其他提示

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

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

硒远程控制 允许您使用您最喜欢的语言和单元测试框架来驱动 Web 浏览器以执行测试。如果您最熟悉 C#/NUnit,则可以以这种方式编写测试并使用您喜欢的所有 NUnit 功能。(例如,Test-Driven.net 插件)。此外,由于您的测试是用高级语言编写的,因此您可以执行诸如从特定测试类继承之类的操作,您可以使用该测试类使实际测试方法代码更加清晰。(或者至少这是我编写测试的方式。它让我可以测试复杂的场景,使我的测试方法行数保持在合理的数量。)

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

如果您使用 Java 或 PHP 编写测试,您可能会有更好的运气。我期望这可以通过 NUnit 在 NUnit2.5 版本中实现,其中将包括用于并行测试的 pNUnit。

如果您对硒还有任何疑问,只需澄清您原来的问题,我将很乐意尝试帮助您。(Selenium 只是我每天使用的工具之一,所以我喜欢帮助新人开始使用它......)

我从 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 中并不总是可靠。

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top