澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

接口常用方法,核心目的

 

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 == '注册成功')

 

 

举个例子说,能够使用上面的点子检查新浪登6页面包车型地铁复选框是还是不是被选中

 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) WebDriver WebDriver提供大多用来与浏览器交互的功能和安装,通过WebDriver的功效和一部分方法...

从那一篇初阶,开端职业的介绍Selenium 以及相关的组件,本文的将钻探如下难题:

WebElement 接口常用方法

自动化进程中与页面进行互动的艺术都以由 WebElement 接口提供的,包涵WebDriver API 中的八种成分定位方法。

  1. clear():清除文本。
  2. send_keys(*value):模拟开关输入。
  3. click():单击成分,包蕴按键、文字/图片链接、复选框、单选框、下拉框等。
  4. submit():提交表单。有时候 submit() 能够和 click() 方法沟通成使用,比如,在搜寻框输加入关贸总协定协会键字之后的“回车”操作,就足以经过 submit() 方法来效仿。但 submit() 的利用范围远逊色 click() 广泛。
  5. size:再次回到成分的尺码。
  6. text:获取成分的文件。
  7. get_attribute(name):获得属性值。
  8. is_displayed():获取该因素是或不是用户可知。比如某个元素是藏身的,假如成分可见则赶回True,不可见重回False。
from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get("https://www.baidu.com")

# 百度输入框中输入abc
driver.find_element_by_id('kw').send_keys("abc")
sleep(2)

# 清除输入的abc
driver.find_element_by_id('kw').clear()
sleep(2)

driver.find_element_by_id('kw').send_keys("python")

# submit() 相当于回车,在此处和 click()方法作用一样。
driver.find_element_by_id('kw').submit()
sleep(2)

# 返回元素的属性值,可以是 id、name、type 或其他任意属性
attribute = driver.find_element_by_id("kw").get_attribute("id")
print(attribute)

# 获得百度输入框的尺寸
size = driver.find_element_by_id("kw").size
print(size)

# 获取百度首页百度按钮的文本信息
text = driver.find_element_by_id("su").text
print(text)
sleep(2)

# 返回元素的结果是否可见,返回结果为True 或 False
result = driver.find_element_by_id("kw").is_displayed()
print(result)

driver.quit()

WebElement 接口还提供了其余措施,能够参见 WebDriver API 官方文书档案学习。

本章将介绍使用Selenium和PhantomJS两种工具用来加载动态数据,越来越多内容请参考:Python学习指南

(一)  WebDriver

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

Selenium

Selenium是1个Web的自动化测试工具,最初是为网址自动化测试而支出的,类型像大家玩游戏用的开关Smart,能够按钦点的指令自动化操作,分歧是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的成效和1部分措施,来落到实处与浏览器窗口、警告、框架和弹出窗口的并行,它也提供了自动化操作浏览器导航栏、设置cookies、截屏等有利大家测试的特点。

顺便表明下,小编所讲到的是Selenium WebDriver的版本。

PhantomJS

PhantomJS是三个依照Webkit的"无分界面"(headless)浏览器,它会把网站加载到内部存款和储蓄器并实施页面上的JavaScript,因为不会来得图形界面,所以运营起来比总体的浏览器更迅捷。

设若大家把Selenium和PhantomJS结合在一道,就可以运转1个百般有力的互联网爬虫了,那些爬虫能够拍卖JavaScript、Cookie、headers,以及别的大家安分守己用户必要做的政工。

专注:PhantomJS只可以从它的网址(http://phantomjs.org/download.html)下载。因为PhantomJS是二个成效完善(就算无分界面)的浏览器而非一个Python库,所以它无需像Python的其余库同样安装,但我们能够经过Selenium调用PhantomJS来平素动用
PhantomsJS官方才考文书档案:http://phantomjs.org/documention

(二)  WebDriver功用及方式

(1):Selenium基本概念

Selenium相关的定义的和素材在互联网有成都百货上千。上边包车型客车那些是援引百度方面包车型大巴介绍:

  Selenium是2个用以Web应用程序测试的工具。Selenium测试直接运营在浏览器中,就如真正的用户在操作同样。援救的浏览器包蕴IE(7、八、玖)、Mozilla Firefox、Mozilla Suite、谷歌Chrome等。这么些工具的主要职能包涵:测试与浏览器的包容性——测试你的应用程序看是或不是能够很好得工作在差别浏览器和操作系统之上。测试系统功效——创造回归测试检查软件功效和用户要求。帮助电动摄像动作和自动生成 .Net、Java、Perl等区别语言的测试脚本。

  设置这壹部分的故事情节不是为着表达Selenium是何许,终归类似的财富无论一搜就有一大把。作者更想享受给我们的是Selenium自己在公司级的测试框架中居于1个怎么样的岗位。就拿自己继续文章想要给我们展示的测试架构来讲。Selenium所处的职责。如图所示,Selenium但是是全部育项目检查实验试框架的壹有的提供了针对性B/S应用程序的测试驱动(即支持我们提供了效仿在浏览器内部进行操作的功力),而完整的自动化平台的搭建还会组成其余的框架(如:单元测试框架<xUnit.Net>,针对Windows桌面应用的驱动,针对手提式有线电话机应用的驱动,提供数据访问的才干... ...),对于哪些创设壹体化的测试框架有空子小编会开二个新的核心小说来商量,不懂也从未关联,这里只是梦想初学者在1上马就有一个系统的定义,知道本人所学的内容今后会用在哪里,该用在哪儿。

 澳门新浦京娱乐场网站 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
获取当前会话里所有窗口的句柄

(2):Selenium 大旨目的 - 浏览器驱动(WebDriver)

  正如此前讲到的,Selenium首要的功力是扶助大家来效仿人工操作浏览器。那么,我们应有如何来操作浏览器呢?答案就是WebDriver, Selenium 为大家提供了操作浏览器的统1接口以及针对性种种主流浏览器驱动程序的完结:

澳门新浦京娱乐场网站 2

  如上海教室所示,能够看到每1种WebDriver 都以对了11浏览器商家提供的驱动包的卷入,Selenium的亮点在于为使用者提供了多种语言版本的Driver,这里大家只是描述C#本子的兑现,其余版本也有近似的贯彻。聊到此地,大家能够类比一下任何的测试驱动框架比如Appium,或是惠特e,其实都是包裹了系统提供的自动化测试API,降低了上层的支出照旧测试人士的求学习话费用和编制程序复杂度... ...

把上海教室简化一下,大家得以见见以下多少个对象:

  • IWebDriver : Selenium 定义的WebDriver接口,具有常用的浏览器操作功效。
  • ChromeDriver : 基于谷歌(谷歌(Google))浏览器的驱动,使用时须要分外的驱动程序。
  • FireFoxDriver : 基于Firefox浏览器的驱动。
  • InternetExplorerDriver : 基于IE浏览器的驱动,使用时须要格外的驱动程序。

澳门新浦京娱乐场网站 3

上边列出了Driver接口定的第2方法和性质:

页面操作

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 : 获取最终三回加载的页面源代码。
  • 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
获取元素的文本值

(4):Selenium 宗旨目的 - By Class(定位条件)

  关于By Class小编会在下一篇《Lesson 0叁 - 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的要害有四个目的,1方面对从前描述的有的概念做二个简约的展现,另一方面首要展现了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标签的3个属性值,并不是显得在下拉框中的值
  • visible_text实在option标签文本的值,是显得在下拉框的值

全数撤回选取如何是好呢?很简短:

select.deselect_all()

比如,天涯论坛注册功效的自动化:

弹窗处理

当你触发了有个别事件过后,页面出现了弹窗提示,管理这几个提示大概获得提醒音信方法如下:

alert = driver.switch_to_alert()

(这里只是举个例证哈,直接复制是没用的,上面包车型客车代码只固定部分字段(邮箱、登入名和注册开关),而且从不管理验证码,验证码部分现在再斟酌怎么管理)

页面切换

三个浏览器断定会有广大窗口,所以大家自然要有法子来完结窗口的切换,切换窗口的点子如下:

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']))

删除库克ies,用法如下:

#By name
driver.delete_cookie('CookieName')

#all
driver.delete_all_cookies()

 

页面等待

瞩目:那是可怜首要的一片段!
近期的网页原来更多选用了Ajax本领,那样程序变不可能分明什么日期有些成分完全加载出来了。倘若实在页面等待事件过长导出有个别dom成分还没出去,不过你的代码直接动用了那一个WebElement,那么就能抛出NullPointer的老大。
为了制止那种成分定位困难而且会增进发生ElementNotVisibleException的概率。所以Selenium提供了二种等待格局,一种是隐式等待,一种是显式等待。
隐式等待就是等待特定的年月,展现等待是指定某1尺度知道这么些标准创建即继续实践。

诸如,能够行使上面包车型客车办法检查新浪登入页面包车型客车复选框是不是被入选

显式等待

显示等待钦命了有个别条件,然后设置最长等待事件。如果在这些时间还找到未有成分,那么便会抛出非凡。

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调用1次来来查看安苏是不是业已转移,假诺本来成分时存在的,那么会立刻回到。

上面是局地平放的等待条件,你能够直接调用那一个标准,而不用自身写一些等待条件了。

    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()

隐式等待

隐式等待比较轻易,正是轻易地安装贰个等候时间,单位为秒。

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。

 

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:接口常用方法,核心目的