当前位置:  开发笔记 > 编程语言 > 正文

如何让我的Selenium测试变得不那么脆弱?

如何解决《如何让我的Selenium测试变得不那么脆弱?》经验,为你挑选了1个好方法。

我们使用Selenium来测试ASP.NET应用程序的UI层.许多测试用例测试跨越多页的较长流程.

我发现测试非常脆弱,不仅仅是通过实际更改页面的代码更改而且还通过无关重构(例如重命名控件)(因为我需要将控件的clientID传递给Selenium的Click方法等)或更换带有转发器的gridview.结果我发现自己"浪费"时间在我的测试用例中更新字符串值以修复损坏的测试.

有没有办法编写更易维护的Selenium测试?还是一个更好的Web UI测试工具?

编辑添加: 通常,第一个草稿是通过在IDE中记录测试来创建的.(第一步可以由QA人员执行.)然后我重构生成的C#代码(提取常量,提取重复代码的方法,可能用不同的数据重复测试用例等).但是每个测试用例的一般代码流程仍然与最初生成的代码相当接近.



1> MariangeMarc..:

我发现PageObject模式非常有用.

http://code.google.com/p/webdriver/wiki/PageObjects

更多信息: - 硒的含义是什么? - Selenium Critique

也许一个好的开始方法是逐步重构你的测试用例.

我使用你有selenium + c#的相同场景

以下是我的代码的样子:

测试方法看起来像这样的想法

    [TestMethod]
    public void RegisterSpecialist(UserInfo usrInfo, CompanyInfo companyInfo)
    {
        var RegistrationPage = new PublicRegistrationPage(selenium)
              .FillUserInfo(usrInfo)
              .ContinueSecondStep();
        RegistrationPage.FillCompanyInfo(companyInfo).ContinueLastStep();
        RegistrationPage.FillSecurityInformation(usrInfo).ContinueFinishLastStep();
        Assert.IsTrue(RegistrationPage.VerifySpecialistRegistrationMessagePayPal());
        selenium.WaitForPageToLoad(Resources.GlobalResources.TimeOut);
        paypal.LoginSandboxPage(usrInfo.sandboxaccount, usrInfo.sandboxpwd);
        Assert.IsTrue(paypal.VerifyAmount(usrInfo));
        paypal.SubmitPayment();
        RegistrationPage.GetSpecialistInformation(usrInfo);
        var bphome = new BPHomePage(selenium, string.Format(Resources.GlobalResources.LoginBPHomePage, usrInfo.AccountName, usrInfo.Password));
        Assert.IsTrue(bphome.VerifyPageWasLoaded(usrInfo));
        Assert.IsTrue(bphome.VerifySpecialistProfile());
        bphome.Logout();
    }

页面对象将是这样的

public class PublicRegistrationPage
{
    public ISelenium selenium { get; set; }

    #region Constructors
    public PublicRegistrationPage(ISelenium sel)
    {
        selenium = sel;
        selenium.Open(Resources.GlobalResources.PublicRegisterURL);
    }
    #endregion
    #region Methods

    public PublicRegistrationPage FillUserInfo(UserInfo usr)
    {
        selenium.Type("ctl00_cphComponent_ctlContent_wizRegister_tUserFirstName", usr.FirstName);
        selenium.Type("ctl00_cphComponent_ctlContent_wizRegister_tUserLastName", usr.LastName);
        selenium.Select("ctl00_cphComponent_ctlContent_wizRegister_ddlUserCountry", string.Format("label={0}",usr.Country ));
        selenium.WaitForPageToLoad(Resources.GlobalResources.TimeOut);
        selenium.Type("ctl00_cphComponent_ctlContent_wizRegister_tUserEmail", usr.Email );
        selenium.Type("ctl00_cphComponent_ctlContent_wizRegister_tUserDirectTel", usr.DirectTel);
        selenium.Type("ctl00_cphComponent_ctlContent_wizRegister_tUserMobile", usr.Mobile);
        return this;
    }

}

希望这可以帮助.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有