Unit testing 硒批评

Unit testing 硒批评,unit-testing,selenium,automated-tests,ui-testing,Unit Testing,Selenium,Automated Tests,Ui Testing,我只是想从运行Selenium()的人那里得到一些意见。我对WaTiN有很多经验,甚至为它写了一套录音套件。我让它产生了一些结构良好的代码,但只由我维护,似乎我的公司几乎放弃了它 如果您已经运行selenium,您是否取得了很多成功 我将使用.NET3.5,Selenium是否能很好地使用它 生成的代码是干净的还是只是所有交互的列表?() 分布式测试套件的公平性如何 对系统的任何其他抱怨或赞美都将不胜感激 如果您使用生成代码,那么您只需获得selenium将执行的每个操作的列表。对我来说,Sel

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

如果您已经运行selenium,您是否取得了很多成功

我将使用.NET3.5,Selenium是否能很好地使用它

生成的代码是干净的还是只是所有交互的列表?()

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

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

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

实现良好的selenium代码的一个好方法是以代码表示您的导航流的方式使用。这是我在(巴西)看到的一个很好的例子:


希望这对我有帮助,我正在使用Selenium Remote Control来测试ASP.Net应用程序(我想你也会以它为目标),而且效果很好

如果您从未使用过Selenium,请观看一些关于使用Selenium IDE的介绍。这将使您对“硒”的工作原理有一个很好的了解。IDE是一个firefox插件,基本上可以让您在运行时开发快速录制和播放测试。对于更大的测试套件或编写真正可维护的测试,我建议使用Selenium Remote Control。(如果您刚刚开始使用IDE,那么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遥控器与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 core不共享100%相同的功能。例如,IDE支持右键单击,但当前的核心版本不支持右键单击。但是,使用他们存储库中的更新版本可以解决这个问题

  • 对于ExtJS、gwt等,请确保您的显示元素具有正确的ID,而不是自动生成(随机)的ID

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


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

你好,marcospereira,我是Selenium的新手。我尝试过这个例子,但当我开始时,我发现“无法连接服务器问题”。我不明白我错在哪里。请帮帮我。谢谢
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);
    }
}