参考内容:官方API文档,下载链接:http://download.csdn.net/detail/kwgkwg001/4004500

虫师:《selenium2自动化测试实战-基于python语言》

一、WebDriver原理

1、关于WebDriver

设计模式:按照Server-Client的经典设计模式设计;

Server端:即Remote Server(远程服务器),可以是任意的浏览器,当脚本启动浏览器时,该浏览器就是Remote Server,它的职责是等待Client发送请求并做出响应;

Client端:简单来说就是我们的测试代码,测试代码中的一些行为是以HTTP请求的方式发送给被测试浏览器——Remote Server,Remote Server接受请求,执行相应操作,

并在Response中返回执行状态、返回值等信息;

2、WebDriver工作流程

①WebDriver启动目标浏览器,并绑定至指定端口,启动的浏览器实例将作为WebDriver的Remote Server;

②Client端通过CommandExcuter发送HTTPRequest给Remote Server的侦听端口(通信协议:the webdriver wire protocol);

③Remote Server需要依赖原生的浏览器组件(比如:chromedriver.exe)来转化浏览器的native调用;

3、WebDriver.log

python提供了logging模块给运行中的应用,提供了一个标准的信息输出接口。它提供了basicConfig方法用于基本信息的定义,开启debug模块,

就可以捕捉到Client端向Server端发送的请求,例子如下:

 # coding=utf-8
# 导入logging模块,捕捉Client发送的请求
from selenium import webdriver
import logging
from selenium import webdriver
from selenium.webdriver.support.select import Select # select类
from selenium.webdriver.common.by import By #By类:定位元素 logging.basicConfig(level=logging.DEBUG)
driver = webdriver.Chrome("F:\安装工具\python\chromedriver.exe")
driver.get("www.baidu.com") driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
driver.quit() 

二、WebDriver定位方法

WebDriver是基于selenium设计的操作浏览器的一套API,针对多种编程语言都实现了这套API,站在python角度来说,WebDriver是python的一个用于实现Web自动化的第三方库。

1、WebDriver定位方法

WebDriver定位方法提供了八种元素定位方法,所对应的方法、特性分别是:

2、XPath和CSS的类似功能对比

3、用By定位元素

针对前面介绍的8种定位方法,WebDriver还提供另一种方法,即:统一调用find_element()方法,通过By来声明定位方法,并且传入对应定位方法的定位参数,例子如下:

find.element()方法只用于定位元素,它需要两个参数,第一个参数是定位的类型,由By提供,第二个参数是定位的具体方式,在使用By之前需要将By类导入;

 # 导入By类的包
from selenium.webdriver.common.by import By
find.element(by.id,"kw")
find.element(by.name,"wd")
find.element(by.class_name,"s_ipt")
find.element(by.tag_name,"input")
find.element(by.link_text,"新闻")
find.element(by.partial_link_text,"新")
find.element(by.xpath,"//*[@class='bg s_btn'")
find.element(by.css_selector,"span.bg s_btn_wr>input#su") 

4、定位一组元素

上面提到的8种定位方法,都是针对单个元素定位的,webdriver还提供了与之对应的8种用于定位一组元素的方法。其一般应用于以下场景:

①批量操作元素,例如勾选页面上所有的复选框;

②先获取一组元素,再从这组元素中过滤出需要操作的元素;

定位一组元素的方法与定位单个元素的用法相似,唯一的区别是在element后面多一个s表示复数,具体如下:

 # webdriver提供的定位一组元素方法
id find_elements_by_id()
Name find_elements_by_name()
class_name find_elements_by_class_name()
tag Name find_elements_by_tag_name()
link text find_elements_by_link_text()
partial link text find_elements_by_partial_link_text()
xpath find_elements_by_xpath()
css selector find_elements_by_css_selector()

获取一组元素中某个元素的几个方法:

len():用来计算元素的个数,通过print()打印出计算的结果;

pos()或pop(-1):默认获取一组元素的最后一个元素,并返回该元素的值;

pop(0):默认获取一组元素的第一个元素,并返回该元素的值;

pop(1):默认获取一组元素的第二个元素,并返回该元素的值;

......

三、WebElement接口常用方法

通常需要与页面交互的方法都由WebElement接口提供,包括上面提到的8种定位方法,下面介绍常用的几种方法:

submit():用于提交表单,例如搜索框输入关键字之后的“回车”操作,例如:

 # 提交表单
from select import webdriver
driver = webdriver.Chrome("安装工具\python\chromedriver.exe")
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("imyalost")
# 提交输入框中的内容
driver.find_element_by_id("imyalost").submit()
driver.quit()

注意:有时候submit()方法和click()方法可以互用,但submit()的应用范围不及click()广泛;

clear():清除文本;

send_keys(*value):模拟按键输入;

click():单击元素;

size:返回元素的尺寸;

text:获取元素的文本;

get.attribute(name):获得属性值;

is_displayed():设置该元素是否用户可见;

 # webelement接口常用方法
from selenium import webdriver
driver = webdriver.Chrome("安装工具\python\chromedriver.exe")
driver.get("http://www.baidu.com")
# 获得输入尺寸
size = driver.find_element_by_id("kw").size
print("size")
# 返回百度页面底部备案信息
text = driver.find_element_by_id("cp").text
print("text")
# 返回元素的属性值,可以是id、name、type或其他属性
attribute = driver.find_element_by_id("kw").get_attribute("type")
print("attribute")
# 返回元素结果是否可见,返回结果为True或Flase
result = driver.find_element_by_id("kw").is_displayed()
print("result") 

PS:上面的例子取自百度首页,关于UI自动化,建议系统的了解学习一下前端相关的基础知识,可以去W3C看看。。。

Selenium:WebDriver简介及元素定位的更多相关文章

  1. Selenium webdriver 学习总结-元素定位

    Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要 ...

  2. java selenium webdriver实战 页面元素定位

    自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...

  3. Python3.x:Selenium中的webdriver进行页面元素定位

    Python3.x:Selenium中的webdriver进行页面元素定位 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等.webdriver ...

  4. selenium webdriver(2)---页面对象定位

    webdriver的元素定位很灵活,提供了多种定位方式: Id LinkText PartialLinkText Name TagName Xpath ClassName CssSelector 这些 ...

  5. [小北De编程手记] : Lesson 03 - Selenium For C# 之 元素定位

    无论哪一种自动化测试的驱动框架(基于B/S,桌面应用,还是手机App).都应当具有一套优秀的元素定位技术.通常的自动化测试流程也可以简单的归结为是一个从被测试程序中识别或是定位元素以及执行操作和验证元 ...

  6. 关于selenium的8种元素定位

    selenium中有八种元素定位,分别是:id,name,class_name,tag_name,link_text.partial_link_text.xpath.css 简单的定位可以用 id.n ...

  7. 【转载】【selenium+Python WebDriver】之元素定位

    总结: 感谢: “煜妃”<Selenuim+Python之元素定位总结及实例说明> “Huilaojia123”<selenium WebDriver定位元素学习总结> “上海 ...

  8. 【转】【selenium+Python WebDriver】之元素定位不到解决办法

    感谢: 煜妃的<Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)> ClassName定位报错问题:<[Python] ...

  9. Selenium基本用法以及元素定位

    一.Selenium 简介 Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,提供一套测试函数,用于支持Web自动化测试.函数非常灵活,能够完成界面元素定位.窗口跳 ...

随机推荐

  1. Linux常用基本命令:三剑客命令之-awk模式用法(1)

    再次回顾一下,awk基本语法格式: awk [options] 'Pattern {Action}' file1 file2 ··· 之前的文章有讲过两种Pattern(BEGIN, END),本文, ...

  2. Python全栈学习_day004作业

    ,写代码,有如下列表,按照要求实现每一个功能 li = ["alex", "WuSir", "ritian", "barry&qu ...

  3. 2018-02-06 编程猫IDE体验:对Scratch的改进

    前两天偶遇编程猫推介(为什么没有中文的编程?), 第一眼感觉像Scratch, 求证之下确实, 并且据说有改良. 今天非常粗浅地尝试一下, 限于水平没有做出很炫的效果, 不过颇有些发现. 首先上最终效 ...

  4. stylus解决移动端1像素边框的问题

    首先 我是借用了yo框架的border和他的媒体查询组合 这两个分别是在yo>lib>core>classes>_border.scss(用来获取yo框架封装的border) ...

  5. 【读书笔记】iOS-方法声明

    编译的时候 ,编译器会把方法前面的IBAction替换成void,把属性前面的IBOutlet移除掉,因为这些都 只是Interface Builder的标志而已.这个IBAction方法会被UI控件 ...

  6. Java字符串占位符(commons-text)替换(转载)

    Java字符串占位符(commons-text)替换 https://blog.csdn.net/varyall/article/details/83651798 <dependency> ...

  7. 《数据库系统概念》10-ER模型

    通过建立实体到概念模型的映射,Entity-Relationship Model可以表达整个数据库的逻辑结构,很多数据库产品都采用E-R模型来表达数据库设计. 一.E-R模型采用了三个基本概念:实体集 ...

  8. .Net Core(三)MVC Core

    MVC Core的改动感觉挺大的,需要的功能大多从Nuget安装,还内置了IOC,支持SelfHost方式运行等等. 一.项目结构的变化创建的新MVC项目的结构发生了变化,比如:静态文件需要统一放置到 ...

  9. JavaScript大杂烩14 - 使用JQuery(上)

    JQuery意义 - Why? 为什么要使用JQuery,从我个人来说,就是这么几点:简化代码 + 统一行为 + 功能强大 + 搭配方便. 简化代码是从写代码的角度来说的,实现同样的功能,如果用Jav ...

  10. Python进阶点

    1. 模块化设计,分而治之 2. 组合数据类型 2.1 集合类型:list.set(无序/不重复),用于数据去重 2.2 序列类型:字符串.元组.列表(有序) 2.3 字典类型:根据字典中 k/v 来 ...