Python+selenium自动化测试基础和元素定位

####################################

自动化测试分类
1,web自动化测试
2,接口自动化测试
3,移动自动化测试
4,单元自动化测试,

####################################

selenium第一阶段:
1,认识自动化测试
2,工具选择
3,seleniumide插件的使用
4,firebug插件的使用

selenium的第二阶段,这是核心,这是基础,会了这个就可以自动化测试了
1,元素的定位,
2,xpath,css元素的定位
3,元素操作
4,浏览器的操作方法

selenium的第三阶段:
1,鼠标操作
2,键盘操作
3,元素等待
4,html特殊元素处理
5,窗口截图

selenium第四阶段
1,自动化测试模型
2,unittest框架
3,unittest断言
4,生成html测试报告
5,测试报告自动发送邮件

####################################

自动化工具的选择
1,qtp,收费,更使用cs架构的软件
2,selenium,
3,Jmeter主要是做接口和性能,
4,loadrunner主要是做性能,收费,
5,robot,关键字驱动的测试框架,

###################################

selenium的特点
1,开源软件
2,跨平台,这是因为使用Python语言的跨平台
3,核心功能,在多个浏览器进行自动化测试
4,支持多语言,java,Python,
5,成熟稳定,已经被大公司广泛使用,
6,可定制,功能强大,

#######################################

selenium的家族
1,selenium1.0,seleniumide,可以录制,
seleniumide,是火狐的一个插件,只能在火狐浏览器使用,工作中不会录制,直接写,但是你可以体验自动化的魅力,
2,selenium2.0 这个市场上用的最多,selenium1.0+webdriver,,
3,selenium3.0

###################################

如何快速找到一个元素的属性和值
就是firebug,也是火狐的一个工具,

########################################

下面进入第二阶段selenium的核心部分
1,掌握元素的各种定位方法
2,webdriver是什么?
selenium2.0=selenium1.0+webdriver,是用于web自动化的测试工具
提供了一套完整的api,
webdriver重点就是定位元素和操作元素,
支持主流的浏览器

#########################################

环境搭建
1,就是Python的环境,
2,怎么搭建环境,
win7
Python3.5
selenium包,主要就是这个包的安装,pip install selenium==2.48.0
pycharm
浏览器

########################################

元素定位,8种定位方式,
id,name,class_name,这个是前端的知识,
tag_name,就是input,p,a,div这些html标签,
link_text,只对a标签的链接有效,
partial_link_text,和link_text一样,是模糊匹配,因为链接的文本会很长,
xpath,元素路径定位,
css,css选择器定位,

##############################################

Firefox的webdriver下载安装
我当时下载Firefox也是费了很大劲,刚开始所有都是用的最新版本,结果调用浏览器总是报错,后来把版本降低才可以,
并且这里driver和Firefox也有对应关系,并且selenium3.6也只能支持Firefox47.0以上的版本.
从网上查的是:firefox
47+selenium 3.13.0+geckodriver 0.15.0 或者selenium3.5.0,firefox57,geckodriver-v0.19.1 我自己的笔记本配置也不是很好,所以我用的更低版本,目前看来这个版本还挺好用,selenium用的2.48.0,Firefox用的35版本

###########################################

from selenium import webdriver
# 实例化浏览器
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
element = driver.find_element_by_id("kw")
element.send_keys("selenium")
su = driver.find_element_by_id("su")
su.click()

################################################

id,name,class_name定位方式都是一样的,
element = driver.find_element_by_id("kw")
element2 = driver.find_element_by_name("wd")
element3 = driver.find_element_by_class_name("s_ipt")

###############################################

tag_name有区别
是找到符合条件的第一个元素,
element3 = driver.find_element_by_tag_name("input")

##########################################

link_text有不同
它是专门定位超链接的,
driver.find_element_by_link_text("新闻").click()

partial_link_text,有不同,
就是不需要传递超链接的全部文本,传入部分就可以,
但是有一个前提,这个局部的文本要有唯一性,
driver.find_element_by_partial_link_text("新").click()

#########################################

find_elements_by_XXX
这种带s的,是返回一个列表,即使有一个值也要通过下标取值
所以你通过标签名称定为会有多个结果就可以使用这个方法来取值具体的某一个元素, driver.find_elements_by_tag_name(
"input")[0].send_keys("123")

################################################

为什么学习xpath和css?
因为有些标签是没有id,name,class_name的,
使用input标签去定为效率很低,

所以使用上面的不能满足我们的需求,
所以需要使用xpath,css,xpath就是xml path,html可以看成是xml的一种形式,

###############################################

xpath学习
1,绝对路径:就是html文件从html一直到标签,所有的层级都包含,这就是绝对路径,绝对路径是/开始的,
2,相对路径,就是不需要全都写,相对路径是//开始的,

//后面要跟标签名称或者*,这是一个关键点,

1,相对路径和属性定位
使用属性的时候,一定要使用@来修饰,id,name,class_name都是一样的用法,只要是属性都能用,
//*[@id='user']
可以使用firebug生成,但是你懂了原理之后,完全可以自己写,

2,属性和层级定位
//*[@id='user']/input,这就是结合使用

3,属性和逻辑结合
//*[@id='user' and @name='user']

##############################################

xpath延伸
1,可以通过文本来定位, //*[text()='username']

2,//*[starts-with(@attribute,'XXX')] 属性值以XXX开头的元素

3,//*[contains(@attribute,'XXX')] 属性值包含XXX的元素,
比如:
//*[@id="editorbox"]/ul/li/a[contains(text(), "发起")]

#################################################

CSS定位
在selenium中极力推荐css定位,以为它比xpath定位要快,
语法是非常的强大的,但是我们只是学习测试中常用的

1,id选择器,最常用的,
2,class选择器,也是最常用的,
3,元素选择器,
4,属性选择器
5,层级选择器,

##################################

id选择器
firebug要切换到css选择器
语法:#id 这种很快,就是这么简单,这样id选择器就学完了,
但是有些可能没有id,
driver.find_elements_by_css_selector()

################################

css选择器
元素要有class属性,
语法:.class,这样就行了,

###############################

元素选择器
直接就是输入标签就可以了,
input,
但是注意在firebug中选择css选择器,

##############################

属性选择器
[type='password']  没有id和class的时候可以使用这种方式
格式就是一个中括号,

###############################

层级选择器就是>

p>input这就是p标签下面的input
p[id='p1']>input,这是属性选择器,
所以要灵活使用

#################################

定位的另一种写法:
from selenium.webdriver.common.by import By
By里面,有8种定位的方式,都在
driver.find_element(by.id,'user')

这个by和find_element_by_XXX有什么区别:
1,其实就是对by的封装,
2,find_element_by_XXX推荐这种,但是自己封装的话就是by,
原文地址:https://www.cnblogs.com/andy0816/p/12526326.html