这一部分,我准备向你们介绍Selenium WebDriver的经常使用API,学习这部份内容须要你们最好有一些简单的HTML相关知识,本文主要涉及到如下内容:html
回顾一下我以前讲过的一个概念:所谓自动化测试,能够简单的归结为是一个从被测试程序中识别或是定位元素以及执行操做和验证元素的过程。从框架设计的角度来说,一个自动化测试框架的驱动程序应该向使用者提供“元素定位,执行操做和元素验证”的功能。关于Selenium提供的优秀的“元素定位”能力,上一篇文章《Lesson 03 - Selenium For C# 之 元素定位》我已经作了相关的描述。而这一篇博客,会介绍Selenium如何模拟用户执行操做以及如何获取须要验证的元素。git
谈到基于B/S的自动化测试,咱们须要检查的主要对象是网页的DOM元素,而Selenium为咱们提供了不少标准的API来获取咱们想要的内容:github
说到这里我先简单的介绍一下这三部份内容和DOM元素的关系(照顾一下彻底不懂HTML的同窗)。所谓元素的文本,能够简单的认为是手工测试过程当中页面上可见的文本信息(即显示内容),如一个输入框内的文本,一个只读的文本域或是一个网页的Title... .... 这些都指的是元素的文本。IWebElement定义了获取元素文本的方式(只读的Text属性):编程
1 public interface IWebElement : ISearchContext 2 { 3 //省略其余属性方法... ... 4 // 5 // Summary: 6 // Gets the innerText of this element, without any leading or trailing whitespace, 7 // and with other whitespace collapsed. 8 // 9 // Exceptions: 10 // OpenQA.Selenium.StaleElementReferenceException: 11 // Thrown when the target element is no longer valid in the document DOM. 12 string Text { get; } 13 }
下面这段代码就是获取了博客园首页导航的文本并输出,测试输出如图所示:浏览器
1 /// <summary> 2 /// demo1 : 检查首页文本 3 /// </summary> 4 [Fact(DisplayName = "Cnblogs.SeleniumAPI.Demo1")] 5 public void SeleniumAPI_Demo1() 6 { 7 _output.WriteLine("Step 01 : 启动浏览器并打开博客园首页。"); 8 IWebDriver driver = new FirefoxDriver(); 9 driver.Url = "http://www.cnblogs.com"; 10 11 _output.WriteLine("Step 02 : 寻找须要检查的页面元素。"); 12 var lnkHome = driver.FindElement(By.XPath(".//ul[@class='post_nav_block']/li[1]/a")); 13 14 _output.WriteLine(string.Format("导航内栏内容:{0}", lnkHome.Text)); 15 16 _output.WriteLine("Step 04 : 关闭浏览器。"); 17 driver.Close(); 18 }
开发人员能够经过配置各类元素的属性来控制DOM元素的行为或者样式。这里须要说明一下,什么是DOM元素的属性。仍是以博客园首页为例,用Firebug查看导航中“首页”对应的元素:服务器
通常的DOM元素格式以下:框架
<tag_name attribute1="value1" attribute2="value2"... ...>Text Content</tag_name>函数
这里tag_name是a,而class,href分别是该元素对应的属性。咱们能够用IWebElement定义的GetAttribute方法来获取属性对应的值。从而获取对DOM作相关的验证和判断,能够用如下代码获取获取这个元素的class属性:post
1 _output.WriteLine("Step 02 : 寻找须要检查的页面元素。"); 2 var lnkHome = driver.FindElement(By.XPath(".//ul[@class='post_nav_block']/li[1]/a")); 3 var value = lnkHome.GetAttribute("class");
简单的说DOM元素的TagName和属性描述了DOM元素的类型(即这个元素是什么,文本框,按钮仍是下拉菜单),而元素的展示样式则是由CSS(层叠样式表)决定的。在此我默认读者是一个懂一些CSS知识的同窗,毕竟咱们的主题是Selenium。CSS定义了元素的样式,好比宽度,高度,颜色等等... ... ,咱们能够用IWebElement定义的GetCssValue方法获取元素的样式,好比咱们须要验证某个元素的显示字体,颜色,或是显示与否等信息。均可以通个这个方法来获取。一样咱们能够获取并输出博客园是首页文本的字体和颜色:学习
1 /// <summary> 2 /// demo2 : 检查首页文本的属性,字体和颜色 3 /// </summary> 4 [Fact(DisplayName = "Cnblogs.SeleniumAPI.Demo2")] 5 public void SeleniumAPI_Demo2() 6 { 7 _output.WriteLine("Step 01 : 启动浏览器并打开博客园首页。"); 8 IWebDriver driver = new FirefoxDriver(); 9 driver.Url = "http://www.cnblogs.com"; 10 11 _output.WriteLine("Step 02 : 寻找须要检查的页面元素。"); 12 var lnkHome = driver.FindElement(By.XPath(".//ul[@class='post_nav_block']/li[1]/a")); 13 14 lnkHome.GetCssValue("color"); 15 16 _output.WriteLine(string.Format("导航内栏内容:{0}", lnkHome.Text)); 17 _output.WriteLine(string.Format("classs属性内容:{0}", lnkHome.GetAttribute("class"))); 18 _output.WriteLine(string.Format("字体:{0}", lnkHome.GetCssValue("font-family"))); 19 _output.WriteLine(string.Format("颜色:{0}", lnkHome.GetCssValue("color"))); 20 21 22 _output.WriteLine("Step 04 : 关闭浏览器。"); 23 driver.Close(); 24 }
输出结果:
Selenium的事件处理大可分为两个部分:简单事件处理和复合操做。
这部份内容我在以前的文章中提到过《Lesson 02 - Selenium For C# 之 核心对象》,IWebElement定义了一常见的事件处理函数:
下面的例子实现了以下功能:(导航到博客园首页>在搜索框中输入“小北De编程手记”>点击“找找看”并等待五秒>关闭浏览器)
1 /// <summary> 2 /// demo3 : 首页查询 3 /// </summary> 4 [Fact(DisplayName = "Cnblogs.SeleniumAPI.Demo3")] 5 public void SeleniumAPI_Demo3() 6 { 7 _output.WriteLine("Step 01 : 启动浏览器并打开博客园首页。"); 8 IWebDriver driver = new FirefoxDriver(); 9 driver.Url = "http://www.cnblogs.com"; 10 11 _output.WriteLine("Step 02 : 寻找须要操做的页面元素。"); 12 var txtSearch = driver.FindElement(By.Id("zzk_q")); 13 var btnSearch = driver.FindElement(By.XPath(".//input[@type='button' and @value='找找看']")); 14 15 _output.WriteLine("Step 03 : 输入查询文本"); 16 txtSearch.SendKeys("小北De编程手记"); 17 18 _output.WriteLine("Step 04 : 点击查询"); 19 btnSearch.Click(); 20 21 System.Threading.Thread.Sleep(5000); 22 23 _output.WriteLine("Step 05 : 关闭浏览器。"); 24 driver.Close(); 25 }
运行这个Demo,正如代码所述的一步步操做... ...
篇幅所限,今天先写到这里(实际上是困了~~~ 哈哈哈)。下一篇我会讲解Selenium实现复杂交互操做,元素的拖拽,特殊DOM元素的处理(下拉菜单,单选复选框)
《Selenium For C#》的相关文章:Click here.
说明:Demo地址:https://github.com/DemoCnblogs/Selenium