3522vip-澳门新葡亰平台官网-www.3522vip.com

3522vip☞(www.rivieraquest.com)能够为大家带来真正的真钱享受,澳门新葡亰平台官网开创业内先河,注册,开户,登录开始体验不同的娱乐世界,全国第一家以娱乐产品为主体对象的专业平台,菲律宾全资子公司成立,天天免费68周周再送168。

3522vip > 计算机编程 > Python Selenium笔记澳门新葡亰平台官网(七):W

原标题:Python Selenium笔记澳门新葡亰平台官网(七):W

浏览次数:196 时间:2019-11-29

 

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

(一)  WebDriver

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

WebDriver提供许多用来与浏览器交互的功能和设置,通过WebDriver的功能和一些方法,来实现与浏览器窗口、警告、框架和弹出窗口的交互,它也提供了自动化操作浏览器导航栏、设置cookies、截屏等方便我们测试的特性。

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

(二)  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桌面应用的驱动,针对手机应用的驱动,提供数据访问的能力... ...),对于如何构建完整的测试框架有机会我会开一个新的主题文章来讨论,不懂也没有关系,这里只是希望初学者在一开始就有一个系统的概念,知道自己所学的内容将来会用在哪里,该用在哪里。

 澳门新葡亰平台官网 1

功能/属性

简单说明

current_url

获取当前页面的URL地址(driver.current_url)
下面的都是以这种方式,driver指浏览器驱动实例。
window_handle
获取当前窗口的句柄
name
获取该实例底层的浏览器名称
orientation
获取当前设备的方位
page_source
获取当前页面源代码
title
获取当前页面的标题
window_handles
获取当前会话里所有窗口的句柄

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

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

澳门新葡亰平台官网 2

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

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

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

澳门新葡亰平台官网 3

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

 

Methods:

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

方法

简单说明

close()
关闭当前浏览器窗口
back()
后退一步
forward()
前进一步
get(url)
访问URL并加载网页到当前的浏览器会话
maximize_window()
最大化浏览器窗口
quit()
退出当前的驱动实例并关闭所有相关窗口
refresh()
刷新当前页面
implicitly_wait()
等待时间,单位为秒
set_page_load_timeout()
设置一个页面完全加载完成的超时等待时间,单位为秒
set_script_timeout()
设置脚本执行的超时时间

Properties:

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

 

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

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

(三)  WebElement功能及方法

Methods:

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

    通过WebElement可以实现与网站页面元素的交互,包括文本框、文本域、按钮、单选框、多选框、表格、行、列和div等。

Properties:

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

功能/属性

简单说明

size
获取元素大小(例如element.size)
下面都是以这种方式,element指定位的某个元素
tag_name
获取标签的名称
text
获取元素的文本值

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

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

 

(五):Demo

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

  这个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的文档:

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

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

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

澳门新葡亰平台官网 4

 

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

  • 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地址:

如果您认为这篇文章还不错或者有所收获,可以点击右下角的**【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!**

作者:小北@North

来源:

声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

方法

简单说明

clear()
清除文本框或文本域的内容
click()
点击元素
get_attribute(name)
获取元素的属性值,name:要获取的属性名称
is_displayed()
检查元素对于用户是否可见
is_enabled()
检查元素是否可用
is_selected()
检查元素是否被选中,主要用于单选框和复选框
send_keys(value)
输入文本,value是要输入的值
submit()
提交表单。如果对元素使用,将会提交该元素所属的表单
value_of_css_property(property_name)
获取CSS属性的值, property_name是CSS属性的名称

 

(四)  操作表单、文本框、复选框、单选按钮

通过WebElement实现与各种HTML控件的自动化交互,例如在一个文本框输入文本、单击按钮、选择单选框或者复选框、获取元素的文本及属性值等。

例如,博客园注册功能的自动化:

(这里只是举个例子哈,直接复制是没用的,下面的代码只定位部分字段(邮箱、登录名和注册按钮),而且没有处理验证码,验证码部分以后再研究怎么处理)

 1 def test_register_new_user(self):
 2 
 3     #定位并点击博客园首页的 注册 
 4 
 5     login_area = self.driver.find_element_by_css_selector('#login_area')
 6 
 7     register = login_area.find_element_by_link_text('注册')
 8 
 9     register.click()
10 
11     #检查打开的网页标题是不是'用户注册 - 博客园'
12 
13     self.assertTrue('用户注册 - 博客园' == self.driver.title)
14 
15     # 定位注册页面各个字段及注册按钮
16 
17     user_email = self.driver.find_element_by_id('Email')
18 
19     user_login_name = self.driver.find_element_by_id('LoginName')
20 
21     register_btn = self.driver.find_element_by_id('submitBtn')
22 
23     # 检查字段允许的最大输入字符与最小输入字符是否与预期一致
24 
25     self.assertEqual('2', user_login_name.get_attribute('data-val-length-min'))
26 
27     self.assertEqual('30', user_login_name.get_attribute('data-val-length-max'))
28 
29     # 检查各个字段及按钮对用户是否可见及可用
30 
31     self.assertTrue(user_email.is_displayed() and user_email.is_enabled())
32 
33     # 输入用户信息
34 
35     user_email.send_keys('test@163.com')
36 
37     user_login_name.send_keys('test')
38 
39     # 点击注册按钮
40 
41     register_btn.click()
42 
43     # 检查是否显示注册成功的提示
44 
45     self.assertTrue(self.driver.find_element_by_css_selector('p.txt-title.success-color').text == '注册成功')

 

 

例如,可以使用下面的方式检查博客园登录页面的复选框是否被选中

 1 def test_login(self):
 2 
 3     …省略打开登录页面的代码(这段就不注释了#)
 4 
 5     automatic_login = self.driver.find_element_by_id('remember_me')
 6 
 7     #检查登录页面复选框,是否默认不被选中
 8 
 9     self.assertFalse(automatic_login.is_selected())
10 
11     #点击选中复选框
12 
13     automatic_login.click()

 

本文由3522vip发布于计算机编程,转载请注明出处:Python Selenium笔记澳门新葡亰平台官网(七):W

关键词: 3522vip

上一篇:python之文件操作

下一篇:没有了