威尼斯人线上娱乐

【威尼斯人线上娱乐】着力目标

27 3月 , 2019  

 

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是三个Web的自动化测试工具,最初是为网站自动化测试而付出的,类型像大家玩游戏用的按键天使,能够按钦点的下令自动化操作,分歧是Selenium能够一向运转在浏览器上,它援救具备主流的浏览器(包含PhantomJS这一个无界面包车型地铁浏览器)。

Selenium能够依照大家的下令,让浏览器自动加载页面,获取须求的页面,甚至页面截屏,也许判断网站上一点动作是或不是爆发。

Selenium自身不带浏览器,不支持浏览器的法力,它须要与第二方浏览器结合在协同才能应用。不过我们有时候须求让它内嵌在代码中运作,全体大家而已用一个叫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是八个依据Webkit的”无界面”(headless)浏览器,它会把网站加载到内部存款和储蓄器并施行页面上的JavaScript,因为不会来得图形界面,所以运维起来比总体的浏览器更迅捷。

假定大家把Selenium和PhantomJS结合在一齐,就可以运行四个十三分有力的互连网爬虫了,那么些爬虫能够拍卖JavaScript、Cookie、headers,以及其余大家实际用户必要做的业务。

专注:PhantomJS只可以从它的网站(http://phantomjs.org/download.html)下载。因为PhantomJS是3个功用完善(就算无界面)的浏览器而非三个Python库,所以它不供给像Python的别样库一样安装,但大家能够通过Selenium调用PhantomJS来平昔动用
PhantomsJS官方才考文书档案:http://phantomjs.org/documention

(二)  WebDriver功用及办法

(一):Selenium基本概念

Selenium相关的概念的和质地在网上有比比皆是。上边包车型大巴这么些是引用百度方面包车型大巴牵线:

【威尼斯人线上娱乐】着力目标。  Selenium是3个用于Web应用程序测试的工具。Selenium测试直接运维在浏览器中,就如真的的用户在操作一样。扶助的浏览器包含IE(七 、八 、9)、Mozilla
Firefox、Mozilla Suite、谷歌(Google)Chrome等。这些工具的机要成效包罗:测试与浏览器的包容性——测试你的应用程序看是不是能够很好得工作在不一致浏览器和操作系统之上。测试系统机能——创制回归测试检查软件成效和用户需求。支持自动摄像动作和自动生成
.Net、Java、Perl等不等语言的测试脚本。

  设置这一部分的剧情不是为着验证Selenium是什么,毕竟类似的财富无论一搜就有一大把。笔者更想享受给我们的是Selenium自身在集团级的测试框架中居于一个哪些的职位。就拿自个儿继续作品想要给我们浮现的测试架构来说。Selenium所处的岗位。如图所示,Selenium可是是一体育项目测验试框架的一局地提供了针对性B/S应用程序的测试驱动(即扶助我们提供了模拟在浏览器内部开始展览操作的意义),而完全的自动化平台的搭建还会结合别的的框架(如:单元测试框架<xUnit.Net>,针对Windows桌面应用的驱动,针对手提式有线电话机使用的驱动,提供数据访问的能力…
…),对于怎么样创设完全的测试框架有机遇笔者会开一个新的宗旨文章来谈谈,不懂也没有关系,那里只是希望初专家在一开始就有一个类其他概念,知道本身所学的始末未来会用在哪个地方,该用在哪儿。

 威尼斯人线上娱乐 1

快速入门

SeleniumCurry有1个叫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 : 基于谷歌(谷歌(Google))浏览器的驱动,使用时索要额外的驱动程序。
  • FireFoxDriver : 基于Firefox浏览器的驱动。
  • InternetExplorerDriver :
    基于IE浏览器的驱动,使用时索要万分的驱动程序。

威尼斯人线上娱乐 3

上边列出了Driver接口定的首要措施和个性:

页面操作

Selenium的WebDriver提供了各样办法来寻找元素,若是下边有三个表单输入框:

<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 : 获取最终一遍加载的页面源代码。
  • 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成分),如页面上的按钮,多选框,输入框,文本域,图片…

都得以看做是三个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控件的自动化交互,例如在一个文本框输入文本、单击按钮、采用单选框恐怕复选框、获取成分的文件及属性值等。

填充表单

咱俩已经通晓了怎么向文本框输入文字,可是有时我们会遇见<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中提供了2个叫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()

隐式等待

隐式等待比较简单,便是简单地安装1个等候时间,单位为秒。

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地图