大旨目的

 

Python+Selenium笔记(七):WebDriver和WebElement,

 

(一)  WebDriver

WebDriver提供比比皆是用来与浏览器交互的职能和设置,通过WebDriver的效率和一部分措施,来落实与浏览器窗口、警告、框架和弹出窗口的互动,它也提供了自动化操作浏览器导航栏、设置cookies、截屏等有利于我们测试的性状。

(二)  WebDriver功用及方式

功能/属性

简单说明

current_url

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

 

方法

简单说明

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

 

(三)  WebElement作用及办法

   
通过WebElement能够完结与网站页面成分的互相,包蕴文本框、文本域、按钮、单选框、多选框、表格、行、列和div等。

功能/属性

简单说明

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

 

方法

简单说明

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('[email protected]')
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()

 

(一) WebDriver
WebDriver提供恒河沙数用来与浏览器交互的效益和安装,通过WebDriver的效益和一部分方法…

从这一篇起先,早先专业的介绍Selenium
以及有关的零件,本文的将研商如下难题:

大旨目的。本章将介绍使用Selenium和PhantomJS三种工具用来加载动态数据,越多内容请参见:Python学习指南

(一)  WebDriver

  • Selenium基本的定义以及在公司化测试框架中的地方
  • Selenium宗旨对象(浏览器驱动) Web Driver
  • Selenium大旨对象(Dom成分)Web Element

Selenium

Selenium是2个Web的自动化测试工具,最初是为网站自动化测试而支付的,类型像我们玩游戏用的按键天使,能够按钦赐的授命自动化操作,差异是Selenium能够间接运维在浏览器上,它协理全数主流的浏览器(包含PhantomJS这个无界面包车型大巴浏览器)。

Selenium能够依照大家的授命,让浏览器自动加载页面,获取要求的页面,甚至页面截屏,或然判断网站上一些动作是或不是发生。

Selenium自个儿不带浏览器,不匡助浏览器的作用,它需求与第壹方浏览器结合在一道才能动用。但是大家有时候须求让它内嵌在代码中运转,全体大家而已用1个叫PhantomJS的工具代替真实的浏览器。

能够从PyPI网站下载Selenium库http://pypi.python.org/simple/sulenium,也足以用第一方管理器pip命令安装:pip install selenium
Selenium官方参考文书档案:http://selenium-python.readthedocs.io/index.html

WebDriver提供许多用来与浏览器交互的作用和装置,通过WebDriver的职能和一部分主意,来落到实处与浏览器窗口、警告、框架和弹出窗口的相互,它也提供了自动化操作浏览器导航栏、设置cookies、截屏等有利于大家测试的特色。

附带表达下,笔者所讲到的是Selenium WebDriver的本子。

PhantomJS

PhantomJS是2个依照Webkit的”无界面”(headless)浏览器,它会把网站加载到内部存款和储蓄器并履行页面上的JavaScript,因为不会显示图形界面,所以运维起来比完全的浏览器更赶快。

假如大家把Selenium和PhantomJS结合在联合,就足以运作贰个要命强大的网络爬虫了,那个爬虫能够拍卖JavaScript、Cookie、headers,以及其余大家实事求是用户必要做的工作。

留神:PhantomJS只好从它的网站(http://phantomjs.org/download.html)下载。因为PhantomJS是1个作用完善(即便无界面)的浏览器而非1个Python库,所以它不须求像Python的其余库一样安装,但大家得以因此Selenium调用PhantomJS来一向运用
PhantomsJS官方才考文书档案:http://phantomjs.org/documention

(二)  WebDriver成效及格局

(一):Selenium基本概念

Selenium相关的定义的和资料在网上有诸多。上边包车型客车这几个是援引百度方面包车型大巴牵线:

  Selenium是3个用以Web应用程序测试的工具。Selenium测试直接运转在浏览器中,就像是真正的用户在操作一样。帮助的浏览器包罗IE(七 、⑧ 、9)、Mozilla
Firefox、Mozilla Suite、GoogleChrome等。这一个工具的重点职能包罗:测试与浏览器的包容性——测试你的应用程序看是还是不是可以很好得工作在分化浏览器和操作系统之上。测试系统机能——创立回归测试检查软件功效和用户须求。协助活动录制动作和自动生成
.Net、Java、Perl等不等语言的测试脚本。

  设置这一局地的内容不是为了证实Selenium是何许,毕竟类似的财富无论一搜就有一大把。小编更想分享给我们的是Selenium自身在店铺级的测试框架中居于2个哪些的职分。就拿本人继续作品想要给大家来得的测试架构来说。Selenium所处的地方。如图所示,Selenium可是是一体测试框架的一某个提供了针对性B/S应用程序的测试驱动(即辅助我们提供了模拟在浏览器内部举行操作的效率),而整机的自动化平台的搭建还会结合别的的框架(如:单元测试框架<xUnit.Net>,针对Windows桌面应用的驱动,针对手提式有线电话机选取的驱动,提供数据访问的能力…
…),对于如何营造完整的测试框架有机会作者会开一个新的核心小说来研讨,不懂也不曾涉及,那里只是梦想初专家在一方始就有四个系统的定义,知道自身所学的剧情今后会用在何地,该用在哪里。

 美高梅开户网址 1

迅猛入门

SeleniumCurry有三个叫WebDriver的API。WebDriver能够决定浏览器的操作,它能够像BeautifulSoup或许其它Selector对象一样用来探寻页面成分,与页面上的成分举行相互(发送文书、点击等),以及实践此外动作来运营网络爬虫。

#-*-  coding:utf-8 -*-
#主要用来测试selenium使用phantomJs

#导入webdriver
from selenium import webdriver
import time

#要想调用键盘按键操作需要引入keys包
from selenium.webdriver.common.keys import Keys

#调用环境变量指定的PhantomJS浏览器创建浏览器对象
driver = webdriver.PhantomJS()
driver.set_window_size(1366, 768)
#如果没有在环境变量指定PhantomJS位置
#driver = webdriver.PhantomJS(executable_path = "./phantomjs")

#get方法会一直等到页面加载,然后才会继续程序,通常测试会在这里选择time.sleep(2)

driver.get("http://www.baidu.com/")

#获取页面名为wraper的id标签的文本内容
data = driver.find_element_by_id('wrapper').text

#打印数据内容
print(data)

print driver.title

#生成页面快照并保存
driver.save_screenshot("baidu.png")

# id="kw"是百度搜索输入框,输入字符串"长城"
driver.find_element_by_id('kw').send_keys(u'长城')

# id="su"是百度搜索按钮,click()是模拟点击
driver.find_element_by_id('su').click()

#获取新的页面快照
driver.save_screenshot("长城.png")

#打印网页渲染后的源代码
print(driver.page_source)

#获取当前页面Cookie
print(driver.get_cookies())

#ctrl+a全选输入框内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')
#ctrl+x剪切输入框内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'x')

#输入框重新输入内容
driver.find_element_by_id('kw').send_keys('itcast')

#模拟Enter回车键
driver.find_element_by_id('su').send_keys(Keys.RETURN)
time.sleep(5)

#清空输入框内容
driver.find_element_by_id('kw').clear()

#生成新的页面快照
driver.save_screenshot('itcast.png')

#获取当前url
print(driver.current_url)

driver.quit()

功能/属性

简单说明

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,或是惠特e,其实都以包裹了系统提供的自动化测试API,降低了上层的开发依旧测试职员的上学花费和编制程序复杂度…

把上航海用教室简化一下,大家能够看看以下多少个对象:

  • IWebDriver : Selenium
    定义的WebDriver接口,具备常用的浏览器操作功用。
  • ChromeDriver : 基于谷歌(谷歌)浏览器的驱动,使用时索要卓殊的驱动程序。
  • Fire福克斯Driver : 基于Firefox浏览器的驱动。
  • InternetExplorerDriver :
    基于IE浏览器的驱动,使用时须求额外的驱动程序。

美高梅开户网址 3

上边列出了Driver接口定的重点方法和属性:

页面操作

Selenium的WebDriver提供了各个格局来搜寻成分,尽管上边有3个表单输入框:

<input type="text" name="user-name" id="passwd-id" />

那么:

#获取id标签值
element = driver.find_element_by_id("passwd-id")
#获取name值
element = driver.find_element_by_name("user-name")
#获取标签名
element = driver.find_element_by_tag("input")
#也可以通过XPath来匹配
element = driver.find_element_by_xpath(//input[@id="passwd-id"])

 

Methods:

  • Close : 关闭当前窗口。
  • FindElement : 查找Dom成分,重临单个的DOM成分。
  • FindElements : 查找Dom成分,再次来到符合条件的DOM成分集合。
  • Manage : 管理浏览器的安装音讯。
  • Navigate : 导航到某些地点。
  • Quit : 关闭浏览器。
  • SwitchTo : 用于切换Frame 和Window,处理弹出框等。

定位UI元素(WebElements)

关于成分的挑三拣四,有如下的API单个元素采取

  1. find_element_by_id
  2. find_element_by_name
  3. find_element_by_xpath
  4. find_element_by_link_text
  5. find_element_by_partial_link_text
  6. find_eelement_by_tag_name
  7. find_element_by_class_name
  8. find_element_by_css_selector

方法

简单说明

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

Properties:

  • CurrentWindowHandle : 获取当前窗口的操作句柄。
  • PageSource : 获取最后1次加载的页面源代码。
  • Title : 获取当前页面包车型大巴Title。
  • Url : 获取或设置当前浏览器的Url地址。
  • WindowHandles : 获取当前浏览器全数打开窗口的操作句柄。

1. By ID

<div id="coolesWidgeEvah">...</div>
  • 实现

element = driver.find_element_by_id("coolesWidgetEvah")

---------or-------
from selenium.webdriver.common.by import By
element = driver.find_element(by=By.ID, value="coolesWidgetEvah")

 

(三):Selenium 主旨目的 – DOM元素对象(WebElement)

  同WebDriver一样,Selenium提供的WebElement对象是用来描述页面上的DOM对象(HTML的DOM对象用来叙述页面上的HTML成分),如页面上的按钮,多选框,输入框,文本域,图片…

都足以看成是2个WebElement对象,在前边的文章里,会对WebElement相关的操作和针对性各种分裂的DOM对象类型的拍卖做进一步的介绍,这一局地大家给我们显示一下WebElement常用的方法和性质:

2. By Class Name

<div class="cheese">Cheddar</div><div class="cheese">Gouda</div>
  • 实现

cheese = driver.find_element_by_class_name('cheese')

----------------or--------------------
from selenium.webdriver.common.by import By
cheese = driver.find_elements(By.CLASS_NAME, "cheese")

(三)  WebElement成效及艺术

Methods:

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

3. By Tag Name

<iframe src="..."></iframe>
  • 实现

frame = driver.find_element_by_tag_name("iframe")
------------------------or---------------
from selenium.webdriver.common.by import By
frame = driver.find_element(By.TAG_NAME, "iframe")

   
通过WebElement可以落成与网站页面成分的交互,包涵文本框、文本域、按钮、单选框、多选框、表格、行、列和div等。

Properties:

  • Display: 获取成分是不是出示。
  • Enabled: 获取元素是不是可用。
  • Location : 获取成分地方音信。
  • Seleced : 获取成分是不是选中。
  • Size : 获取成分的Height 和 Width。
  • TagName : 获取成分的TagName。
  • Text : 获取元素的文件内容。

4.By Name

<imput name="cheese" type="text" />
  • 实现

cheese = driver.find_element_by_name("cheese")

-------------or-------------------------
from selenium.webdrier.common.by import By
cheese = driver.find_element(By.NAME, "cheese")

功能/属性

简单说明

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

(四):Selenium 核心指标 – By Class(定位条件)

  关于By Class笔者会在下一篇《Lesson 03 – Selenium For C# 之
元素定位》中牵线。

5. By Link Text

<a href="http://www.google.com/search?q=cheese">cheese</a>
  • 实现

cheese = driver.find_element_by_link_text("cheese")
---------------------or-----------------------
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.LINK_TEXT, "cheese")

 

(五):Demo

  说了那般多,该到入手写点什么的时候了。so…
小编做了个简单的德姆o供大家有个感官的认识。上边包车型大巴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

来源:

评释:本博客原创文字只代表自己工作中在某暂时间内总计的看法或结论,与本身所在单位没有一贯利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段申明,且在篇章页面显然地点给出原作连接。

6.By Partial Link Text

<a href="http://www.google.com/search?q=cheese">search for cheese</a>
  • 实现

cheese = driver.find_element_by_partial_link_text("cheese")

-----------------or-----------------
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.PARTIAL_LINK_TEXT, "cheese")

方法

简单说明

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属性的名称

6.By CSS

<div id="food">milkcheese</div>
  • 实现

cheese = driver.find_element_by_css_selector("#food span.dairy.aged")
----------------or-------------------------------
from selenium.webdriver.common.by import By
cheese = driver.find_element(By.CSS_SELECTOR, "#food span.dairy.aged")

 

7.By XPath

<input type="text" name="example" / >
<input type="text" name="other" / >
  • 实现

inputs = driver.find_elements_by_xpath("input")
-------------------or------------------
from selenium.webdriver.common.by import By
inputs = driver.find_elements(By.XPATH, "//input")

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

鼠标动作链

有个别时候,大家须求在页面上模仿一些鼠标操作,比如双击、右击、拖拽甚至按住不动等,大家可因而导入ActionChains类来做到:

**示例: **

#导入ActionChains类
from selenium.webdrive import ActionChains

#鼠标移动到ac位置
ac = driver.find_elenemt_by_xpath('element')
ActionChains(driver).move_to_element(ac).perform()

#在ac位置单击
ac = driver.find_element_by_xpath('elementA')
ActionChains(driver).move_to_element(ac).click(ac).perform()

#在ac位置双击
ac = driver.find_element_by_xpath("elementB")
ActionChains(driver).move_to_element(ac).double_click(ac).perform()

#在ac位置右击
ac = driver.find_element_by_xpath('elementC')
ActionChains(driver).move_to_element(ac).context_click(ac).perform()

#在ac位置左键单击hold住
ac = driver.find_element_by_xpath('elementF')
ActionChains(driver).move_to_element(ac).click_and_hold(ac).perform()

#将ac1拖拽到ac2位置
ac1 = driver.find_element_by_xpath('elementD')
ac2 = driver.find_element_by_xpath('elementE')
ActionChains(driver).drag_and_drop(ac1, ac2).perform()

由此WebElement完毕与各类HTML控件的自动化交互,例如在3个文本框输入文本、单击按钮、采用单选框也许复选框、获取成分的文书及属性值等。

填充表单

大家曾经理解了怎样向文本框输入文字,不过有时咱们会遇到<select></select>标签的下拉框。直接点击下拉框中的选项不自然可行。

<select id="status" class="form-control valid" onchange="" name = 'status'>
    <option value=""></option>
    <option value="0">未审核</option>
    <option value="1">初审通过</option>
    <option value="2">复审通过</option>
    <option value="3">审核不通过</option>
</select>

美高梅开户网址 5

下拉框

Selenium专门提供了Select类来处理下拉框。其实WebDriver中提供了三个叫Select的办法,能够扶助大家实现那个工作:

#导入Select类
from selenium.webdriver.support.ui import Select

#找到name的选项卡
select = Select(driver.find_element_by_name('status'))

#s
select.select_by_index(1)
select.select_by_value("0")
select.select_by_visible_text(u'未审核')

以上是二种采取下拉框的措施,它能够依据目录来挑选,能够依据值来选择,能够依照文字来接纳。注意:

  • index索引从0开始
  • value是option标签的三个属性值,并不是显得在下拉框中的值
  • visible_text实在option标签文本的值,是显得在下拉框的值

全体撤消选择如何是好吧?很简短:

select.deselect_all()

诸如,腾讯网注册成效的自动化:

弹窗处理

当您触发了某些事件随后,页面出现了弹窗提示,处理这一个提醒可能取得提示音讯方法如下:

alert = driver.switch_to_alert()

(那里只是举个例子哈,直接复制是没用的,下边包车型客车代码只固定部分字段(邮箱、登录名和注册按钮),而且从不处理验证码,验证码部分以后再商量怎么处理)

页面切换

3个浏览器肯定会有更仆难数窗口,所以我们必将要有办法来贯彻窗口的切换,切换窗口的不二法门如下:

driver.switch_to_window('this is window name')

也足以行使window_handles方法来获得各种窗口的操作对象。例如:

for handle in driver.window_handles:
    driver.switch_to_window(handle)
 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 == '注册成功')

页面包车型地铁向上和落后

操作页面包车型大巴发展和倒退功效:

driver.forward()  #前进
driver.back()    #后退

 

Cookies

收获页面各样Cookies值,用法如下:

for cookie in driver.get_cookies():
    print("%s -> %s"%(cookie['name'], cookie['value']))

剔除Cookies,用法如下:

#By name
driver.delete_cookie('CookieName')

#all
driver.delete_all_cookies()

 

页面等待

小心:那是丰硕关键的一某些!
现行反革命的网页原来更多使用了Ajax技术,这样程序变不能够鲜明何时有个别成分完全加载出来了。固然实在页面等待事件过长导出某些dom成分还没出去,可是你的代码直接选择了那几个WebElement,那么就会抛出NullPointer的那个。
为了幸免那种成分定位困难而且会抓牢发生ElementNotVisibleException的可能率。所以Selenium提供了二种等待方式,一种是隐式等待,一种是显式等待。
隐式等待就是等待特定的时日,显示等待是内定某一尺码知道这一个规则建立刻继续执行。

比如说,能够选用下边包车型客车章程检查腾讯网登录页面包车型地铁复选框是还是不是被入选

显式等待

来得等待钦命了有些条件,然后设置最长等待事件。尽管在那个日子还找到没有元素,那么便会抛出十一分。

from selenium import webdriver
from selenium.webdriver.common.by import By

#WebDriverWait库,负责循环等待
from selenium.webdriver.support.ui import WebDriverWait
#expected_conditions类,负责条件触发
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()

driver.get("http://www.xxxx.com/loading")

try:
    #页面一直循环,知道id="myDynamicElement"出现
    element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "myDynamicElement"))
        )
finally:
    driver.quit()    

一经不写参数,程序暗中同意会0.5s调用三次来来查看安苏是还是不是早已成形,借使本来成分时存在的,那么会立即回去。

下边是一对放手的等候条件,你能够一贯调用这几个规范,而不用自身写一些等待条件了。

    title_is
    title_contains
    presence_of_element_located
    visibility_of_element_located
    visibility_of
    presence_of_all_elements_located
    text_to_be_present_in_element
    text_to_be_present_in_element_value
    frame_to_be_available_and_switch_to_it
    invisibility_of_element_located
    element_to_be_clickable - it is Displayed and Enabled
    staleness_of
    element_to_be_selected
    element_located_to_be_selected
    element_selection_state_to_be
    element_located_selection_state_to_be
    aert_is_present
 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()

隐式等待

隐式等待比较不难,正是简单地安装2个等待时间,单位为秒。

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)  #seconds

driver.get("http://www.xxxxx.com/loading")

myDynamicElement = driver.find_element_by_id("myDynamicElement")

万一不设置,暗中认可等待时间为0。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图