从这一篇开始,开始正式的介绍Selenium 以及相关的组件,本文的将讨论如下问题:

  • Selenium基本的概念以及在企业化测试框架中的位置
  • Selenium核心对象(浏览器驱动) Web Driver
  • Selenium核心对象(Dom元素)Web Element

顺便说明下,我所讲到的是Selenium WebDriver的版本。

(一):Selenium基本概念

Selenium相关的概念的和资料在网上有很多。下面的这个是引用百度上面的介绍:

  Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite、Google Chrome等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

  设置这一部分的内容不是为了说明Selenium是什么,毕竟类似的资源随便一搜就有一大把。我更想分享给大家的是Selenium本身在企业级的测试框架中处于一个什么样的位置。就拿我后续文章想要给大家展示的测试架构来说。Selenium所处的位置。如图所示,Selenium不过是整个测试框架的一部分提供了针对B/S应用程序的测试驱动(即帮助我们提供了模拟在浏览器内部进行操作的功能),而整体的自动化平台的搭建还会结合其他的框架(如:单元测试框架<xUnit.Net>,针对Windows桌面应用的驱动,针对手机应用的驱动,提供数据访问的能力... ...),对于如何构建完整的测试框架有机会我会开一个新的主题文章来讨论,不懂也没有关系,这里只是希望初学者在一开始就有一个系统的概念,知道自己所学的内容将来会用在哪里,该用在哪里。

(二):Selenium 核心对象 - 浏览器驱动(WebDriver)

  正如之前讲到的,Selenium主要的功能是协助我们来模拟人工操作浏览器。那么,我们应当如何来操作浏览器呢?答案就是WebDriver, Selenium 为我们提供了操作浏览器的统一接口以及针对各种主流浏览器驱动程序的实现:

  如上图所示,可以看到每一种WebDriver 都是对了各个浏览器厂商提供的驱动包的封装,Selenium的优点在于为使用者提供了多种语言版本的Driver,这里我们只是描述C#版本的实现,其他版本也有类似的实现。说到这里,我们可以类比一下其他的测试驱动框架比如Appium,或是White,其实都是封装了系统提供的自动化测试API,降低了上层的开发或者测试人员的学习成本和编程复杂度... ...

把上图简化一下,我们可以看到以下几个对象:

  • IWebDriver : Selenium 定义的WebDriver接口,具备常用的浏览器操作功能。
  • ChromeDriver : 基于谷歌浏览器的驱动,使用时需要额外的驱动程序。
  • FireFoxDriver : 基于Firefox浏览器的驱动。
  • InternetExplorerDriver : 基于IE浏览器的驱动,使用时需要额外的驱动程序。

下面列出了Driver接口定的主要方法和属性:

Methods:

  • Close : 关闭当前窗口。
  • FindElement : 查找Dom元素,返回单个的DOM元素。
  • FindElements : 查找Dom元素,返回符合条件的DOM元素集合。
  • Manage : 管理浏览器的设置信息。
  • Navigate : 导航到某个地址。
  • Quit : 关闭浏览器。
  • SwitchTo : 用于切换Frame 和Window,处理弹出框等。

Properties:

  • CurrentWindowHandle : 获取当前窗口的操作句柄。
  • PageSource : 获取最后一次加载的页面源代码。
  • Title : 获取当前页面的Title。
  • Url : 获取或设置当前浏览器的Url地址。
  • WindowHandles : 获取当前浏览器所有打开窗口的操作句柄。

(三):Selenium 核心对象 - DOM元素对象(WebElement)

  同WebDriver一样,Selenium提供的WebElement对象是用来描述页面上的DOM对象(HTML的DOM对象用来描述页面上的HTML元素),如页面上的按钮,多选框,输入框,文本域,图片... ... 都可以看作是一个WebElement对象,在后面的文章里,会对WebElement相关的操作和针对各个不同的DOM对象类型的处理做进一步的介绍,这一部分我们给大家展示一下WebElement常用的方法和属性:

Methods:

  • Clear : 清空当前DOM元素内容(用于文本输入元素)。
  • Click : 单击当前DOM元素。
  • FindElement : 查找当前DOM元素下的子元素,返回单个的DOM元素。
  • FindElements : 查找当前DOM元素下的子元素,返回符合条件的DOM元素集合。
  • GetAttribute: 获取当前DOM元素的属性值。
  • GetCssValue : 获取当前DOM元素CSS样式。
  • SendKey : 想当前DOM元素输入指定文本。
  • Submit : 提交当前元素到Web服务器。

Properties:

  • Display: 获取元素是否显示。
  • Enabled: 获取元素是否可用。
  • Location : 获取元素位置信息。
  • Seleced : 获取元素是否选中。
  • Size : 获取元素的Height 和 Width。
  • TagName : 获取元素的TagName。
  • Text : 获取元素的文本内容。

(四):Selenium 核心对象 - By Class(定位条件)

  关于By Class我会在下一篇《Lesson 03 - Selenium For C# 之 元素定位》中介绍。

(五):Demo

  说了这么多,该到动手写点什么的时候了。so... 我做了个简单的Demo供大家有个感官的认识。下面的Code我已经上传到Github地址是:https://github.com/DemoCnblogs/Selenium

  这个Dome的主要有两个目的,一方面对之前描述的部分概念做一个简单的展示,另一方面主要展示了xUnit.Net Test Case的基本结构,代码如下:

 1 using OpenQA.Selenium;
 2 using OpenQA.Selenium.Firefox;
 3 using Xunit;
 4 using Xunit.Abstractions;
 5
 6 namespace Demo.SeleniumTest
 7 {
 8     public class Lesson02_CoreObject
 9     {
10         /// <summary>
11         /// 输出对象
12         /// </summary>
13         private readonly ITestOutputHelper _output;
14         /// <summary>
15         /// 构造函数,初始化输出对象
16         /// </summary>
17         /// <param name="output">注入输出对象</param>
18         public Lesson02_CoreObject(ITestOutputHelper output)
19         {
20             this._output = output;
21         }
22
23         /// <summary>
24         /// demo1 : 获取元素
25         /// </summary>
26         [Fact(DisplayName = "Cnblogs.CoreObject.Demo1")]
27         public void CoreObject_Demo1()
28         {
29             _output.WriteLine("Step 01 : 启动浏览器并打开博客园首页。");
30             IWebDriver driver = new FirefoxDriver();
31             driver.Url = "http://www.cnblogs.com";
32             driver.Manage().Window.Maximize();
33
34             _output.WriteLine("Step 02 : 获取并输出部分页面信息。");
35             _output.WriteLine(string.Format("Current window handle: {0}", driver.CurrentWindowHandle));
36             _output.WriteLine(string.Format("Window handle count: {0}", driver.WindowHandles.Count));
37             _output.WriteLine(string.Format("Current window title: {0}", driver.Title));
38
39             _output.WriteLine("Step 03 : 验证博客园站点的 Title 是否正确。");
40             Assert.Equal<string>("博客园 - 开发者的网上家园", driver.Title);
41
42             _output.WriteLine("Step 04 : 关闭当前页面。");
43             driver.Close();
44         }
45     }
46 }

这里我简单的介绍一下Code的逻辑:

  首先,构造函数注入了输出的对象,这部分我会在xUnit.Net相关的文章作讲解。性急的同学要是等不及我的更新也可以参照xUnit.Net的文档:http://xunit.github.io。

  然后,就是我们的Test case ,开启本机的火狐浏览器>最大化并导航到博客园首页>输出信息>检验Title是否正确>关闭浏览器。

  需要说明的是 输出和验证Title是xUnit.Net的功能(每个单元测试框架都有)。当然,生产环境使用的测试Code是会做更多的封装的,这个代码只是供大家学习使用。

  最后,处理你会看见你本机的浏览器上面的操作之外,还会得到如下的输出结果:

总结:本文主要介绍了以下几点内容。

  • Selenium的作用以及在企业级测试框架中的位置。
  • 浏览器控制对象(驱动) WebDriver
  • DOM元素对象WebElement
  • 基本的Test Case 书写

关于《Selenium For C#》 系列,我计划给大家逐一介绍一些Selenium Driver的基础知识和框架的扩展点。 当然,之后会有更多关于测试框架构以及软件构建方面的文章。愿我主保佑我有时间做完这件事情... ...

《Selenium For C#》的相关文章:Click here.

  • [小北De编程手记] : Lesson 01 - Selenium For C# 之 环境搭建
  • [小北De编程手记] : Lesson 02 - Selenium For C# 之 核心对象
  • [小北De编程手记] : Lesson 03 - Selenium For C# 之 元素定位
  • [小北De编程手记] : Lesson 04 - Selenium For C# 之 API 上
  • [小北De编程手记] : Lesson 05 - Selenium For C# 之 API 下
  • [小北De编程手记] : Lesson 06 - Selenium For C# 之 流程控制
  • [小北De编程手记] : Lesson 07 - Selenium For C# 之 窗口处理
  • [小北De编程手记] : Lesson 08 - Selenium For C# 之 PageFactory & 团队构建

说明:Demo地址:https://github.com/DemoCnblogs/Selenium

如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!
作者:小北@North
来源:http://www.cnblogs.com/NorthAlan
声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

转载于:https://www.cnblogs.com/NorthAlan/p/5156234.html

[小北De编程手记] : Lesson 02 - Selenium For C# 之 核心对象相关推荐

  1. [小北De编程手记] [Lesson 02] AutoFramework构建 之 Page Objects - 设计模式

    写在最前面 这个系列的主旨是要跟大家分享一下关于自动化测试框架的构建的一些心得.这几年,做了一些自动化测试框架以及团队的构建的工作.过程中遇到了很多这样的同学,他们在学习了某一门语言和一些自动化测试的 ...

  2. [小北De编程手记] : Lesson 05 玩转 xUnit.Net 之 从Assert谈UT框架实践

    这一篇,本文会介绍一下基本的断言概念,但重点会放在企业级单元测试的相关功能上面.下面来跟大家分享一下xUnit.Net的断言,主要涉及到以下内容: 关于断言的概念 xUnit.Net常用的断言 关于单 ...

  3. #IB TWS编程手记——02.提交你的第一个Hello World!

    关于IB的错误码 在我们进一步深入IB的工作机理前,需要回到Wrapper中error函数,如果善用error函数提供的错误信息,将能帮助我们快速定位到错误,并且修正我们的代码. 关于IB错误Code ...

  4. 小北思维|前端新技术 VS 你的认知

    文/小北哥哥.闹闹 阅读本文大约需要 5分钟 一 前两篇文章,一篇让我们学习时要快速找到价值点,高效的学习干货内容,另一篇让你认识到应该如何分析问题并提问. 今天这篇文章也是这个自学系列中的最后一篇, ...

  5. java编程菜鸟入门02

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: java编程菜鸟入门01 java编程菜鸟入门02 ...

  6. LOGO(小海龟)编程之父留给我们的思想遗产

    LOGO(小海龟)编程之父留给我们的思想遗产 中国少儿编程网 • Logo编程 • 2016-08-04 10:06 发明「小海龟编程」的人工智能之父逝世了,世人对他的编程哲学仍未理解 原标题:Sey ...

  7. [jimmyzhouj 翻译] Nehe iOS OpenGL ES 2.0教程 --Lesson 02

    http://jimmyzhouj.blog.51cto.com/2317513/883520 原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 .作者信息和本声明.否则将追究法律责任 ...

  8. 最新《小甲鱼C++编程快速入门教程》

    这套教程一共40讲,内容真心不错,其实大家看看目录也就能得出结论了  ===============课程目录=============== <鱼C论坛小甲鱼C++编程快速入门培训系列教程> ...

  9. 大数据Scala编程.问题集(02)

    大数据Scala编程.问题集(02) by 高焕堂 洞庭国际智能硬件检测基地 & 中云大数据中心(IDC) 首席架构师 微博:@高焕堂_台北 Q-02: Scala语言的trait具有什么设计 ...

最新文章

  1. 华为android8适配进度,华为 荣耀 O版本(Android 8.0)适配进度公告
  2. python queue_Python-Queue 入门
  3. android studio 加载ffmpeg.so,Android studio使用已经编译好的ffmpeg .so库
  4. 静态变数和非静态变数_统计资料:了解变数
  5. Linux 比较不同命令
  6. 分布式事务中间件你知道哪些?
  7. 一年之后 重温旧“梦”
  8. c语言,成绩输出直方图,编写一个程序,打印输入中单词长度的直方图
  9. 5.29 狡猾的商人(把后天的写了,老师不会打我吧)
  10. OCR文字识别【前端渲染,后端进行逻辑处理】
  11. 路飞学城python电子书闲鱼_路飞学城-python开发集训-第一章之用户登陆做业
  12. 南京市公安局电子警察系统数据库扩容和异地灾备公开招标采购公告
  13. 弹弹弹,弹走鱼尾纹的弹出菜单(vue)
  14. 操作系统中 完成时间,周转时间,带权周转时间和到达时间,服务时间是什么关系,怎么算
  15. L3-020 至多删三个字符 (30 分)
  16. 广域网 —— HDLC协议
  17. PhotoShopCS6报错error:16解决办法
  18. 《摄氏华氏温度转换》
  19. 小学生名字卡(HTML版可打印)
  20. 【Linux】htop命令的使用详解

热门文章

  1. 矩阵快速幂 zoj-3690 Choosing number
  2. CommonJS,AMD,CMD区别 - 郑星阳 - ITeye博客
  3. vue项目中 axios请求拦截器与取消pending请求功能 - 年少、 - 博客园
  4. node --- 使用express.Router与body-parser
  5. es6 --- 使用yield*命令遍历完全二叉树
  6. 算法 --- 插入排序的JS实现
  7. vue --- 使用字符串'api'跨域请求资源
  8. 小米出招黑科技,5S或成全球首款”Under glass“指纹识别手机
  9. 分页探究--Filter+JSTL
  10. Python-memcached的基本使用 - Flynewton成长点滴 - 开源中国社区