Selenium Web Testing

本文介绍了一种使用Selenium WebDriver进行Web应用自动化测试的方法。详细展示了如何安装Selenium WebDriver并结合MSTest环境编写登录和登出的测试案例。文中还提供了基于不同浏览器的WebDriver配置代码,以及如何定位页面元素和执行断言。

在以往的MS项目中都是用MS的内部Automation工具,最近的项目都是非MS的Web项目,所以必须寻找重新寻找一套Automation 工具,搜了一下,貌似近几年Selenium比较火,研究下来果然不错:

 

有2套模式供不同需求和不同级别的测试人员选择

1) 基于Firefox插件的自动化测试脚本,只需装上一个Firefox插件,按一个记录按钮,操作几下步骤,整个过程就会自动转换成test case, test case实际上就是一个脚本文件,有一点代码入门基础的人都可以很方便的理解和修改,生成test case.

同时,基于生成的test case,可以利用内置的很多AssertXXX,和VerifyXXX方法来验证整个case,而且验证的对象都是可以通过界面选中的,非常方便。

 

2) WebDriver的UI Automation, 针对有一定代码能力和更丰富需求的Automation tester,提供了完整的API,tester通过调用API完成各种界面操作,由于case都是代码写的,所以可以加入数据case开跑前的环境准备和case跑后的环境清理工作等步骤,非常适合创建复杂的自动化测试项目。

WebDriver的兼容性是另一个亮点,支持通过Java, C#, Python, Ruby, PHP, Perl和JavaScript来开发,支持的浏览器也很丰富:Firefox, IE, Safari, Opera, Chrome。光是这点,就比我之前用的MS Automation强大很多。

 

针对WebDriver, 我简单写了个在MSTest 环境下的LogIn和LogOut case:

简要步骤:

1. 通过Nuget安装Selenium WebDriver和Selenium.WebDriver.IEDriver

2. 创建IE的WebDriver

IWebDriver driver =new InternetExplorerDriver();

3.通过FindElement,By.Name, By.ClassName, By.ID, By.CssSelector等各种办法找到UI对象,然后对对象操作。

            IWebElement query = driver.FindElement(By.Name("UserName"));

            query.SendKeys(UserName);//填值
            query = driver.FindElement(By.Name("Password"));

            query.SendKeys(Password);//填值
            query.Submit();//提交

4. 最后验证步骤

Assert.AreEqual("http://localhost/", driver.Url);

 

跑下来有几个特点:

a) 整个跑case的过程不会受到鼠标移动影响,比2010年左右用的coded UI稳定很多(现在的版本不清楚了)

b)IE的Driver比Firefox的快,其他的还没试过



完整代码(处于项目初期,代码不是很完善):

DriverManager类来创建WebDriver对象

    public class DriverManager
    {
        static IWebDriver driver;
        public static IWebDriver CreateDriver()
        {
            string DriverServerType = ConfigurationManager.AppSettings["BrowserType"].ToString();

            if (DriverServerType == "FireFox")
            {
                driver = new FirefoxDriver();
            }
            else
            {
                driver = new InternetExplorerDriver();
            }
            return driver;
        }
        public static IWebDriver GetDriver()
        {
            return null != driver ? driver : null;
        }

    }


 

UI的每个行为的操作类

    public partial class UIUtility
    {
        static public void LogIn(string UserName, string Password)
        {
            IWebDriver driver = DriverManager.GetDriver();
            IWebElement query = driver.FindElement(By.Name("UserName"));

            query.SendKeys(UserName);

            query = driver.FindElement(By.Name("Password"));

            query.SendKeys(Password);

            query.Submit();
        }

        static public void LogOut()
        {
            IWebDriver driver = DriverManager.GetDriver();
            IWebElement query = driver.FindElement(By.LinkText("Logout"));
            query.Click();
        }

    }


baseCase类,被test case类继承,这样不用每次都写一遍Create和Close:

    public class BaseCase
    {
        protected IWebDriver driver;

        [TestInitialize]
        public void Initialize()
        {
            driver = DriverManager.CreateDriver();
        }


        [TestCleanup]
        public void CleanUp()
        {
            driver.Close();
        }

    }


最后是具体的case:

public class LogIn_LogOut:BaseCase
    {
        static string LogInURL = ConfigurationManager.AppSettings["ServerURL"].ToString() + "/Account/Login?ReturnUrl=%2F";
        static string AdminName = ConfigurationManager.AppSettings["AdminName"].ToString();
        static string AdminPassword = ConfigurationManager.AppSettings["Password"].ToString();

        [Priority(0)]
        [TestMethod]
        [TestCategory("LogIn_Out")]
        public void LogIn_LogOut_Success()
        {
            driver.Navigate().GoToUrl(LogInURL);

            UIUtility.LogIn(AdminName, AdminPassword);

            Assert.AreEqual(ConfigurationManager.AppSettings["ServerURL"].ToString(), driver.Url);

            UIUtility.LogOut();

            Assert.AreEqual(LogInURL, driver.Url);

        }

        [Priority(1)]
        [TestMethod]
        [TestCategory("LogIn_Out")]
        public void LogInFailed_IncorrectPW()
        {
            driver.Navigate().GoToUrl(LogInURL);

            UIUtility.LogIn(AdminName, "IncorrectPassword");

            IWebElement query = driver.FindElement(By.ClassName("validation-summary-errors"));

            Assert.IsTrue(query.Text.Contains("Invalid username or password."));
        }
    }


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值