<article data-content="[{"type":"block","id":"3060-1621846615933","name":"paragraph","data":{},"nodes":[{"type":"text","id":"p5PQ-1621846617594","leaves":[{"text":"第 11讲 python 中 UI 自动化","marks":[]}]}],"state":{}},{"type":"block","id":"VmnA-1662033050526","name":"paragraph","data":{},"nodes":[{"type":"text","id":"A7Ys-1662033050047","leaves":[{"text":"1、什么是UI自动化","marks":[]}]}],"state":{}},{"type":"block","id":"GCO4-1662033050527","name":"paragraph","data":{},"nodes":[{"type":"text","id":"wfzn-1662033050049","leaves":[{"text":"原本用手工操作ui页面的方式,现在用代码去实现自动化操作的方式","marks":[]}]}],"state":{}},{"type":"block","id":"H2cy-1662033050528","name":"paragraph","data":{},"nodes":[{"type":"text","id":"cc3z-1662033050051","leaves":[{"text":"2、UI自动化的优点","marks":[]}]}],"state":{}},{"type":"block","id":"HuK6-1662033050529","name":"paragraph","data":{},"nodes":[{"type":"text","id":"LQpO-1662033050053","leaves":[{"text":"1)解决重复性功能测试和验证","marks":[]}]}],"state":{}},{"type":"block","id":"5cDP-1662033050530","name":"paragraph","data":{},"nodes":[{"type":"text","id":"qZMz-1662033050055","leaves":[{"text":"2)减少回归测试的人力 时间","marks":[]}]}],"state":{}},{"type":"block","id":"0QZB-1662033050531","name":"paragraph","data":{},"nodes":[{"type":"text","id":"Dd31-1662033050058","leaves":[{"text":"3)减少回归测试时漏测的现象","marks":[]}]}],"state":{}},{"type":"block","id":"8utj-1662033050532","name":"paragraph","data":{},"nodes":[{"type":"text","id":"NC2h-1662033050060","leaves":[{"text":"3、什么样的项目适合做UI自动化","marks":[]}]}],"state":{}},{"type":"block","id":"F5ii-1662033050533","name":"paragraph","data":{},"nodes":[{"type":"text","id":"GzeT-1662033050062","leaves":[{"text":"1)需要比较稳定,需求变更不频繁","marks":[]}]}],"state":{}},{"type":"block","id":"nkSH-1662033050534","name":"paragraph","data":{},"nodes":[{"type":"text","id":"E72p-1662033050064","leaves":[{"text":"2)项目周期比较长","marks":[]}]}],"state":{}},{"type":"block","id":"U6xt-1662033050535","name":"paragraph","data":{},"nodes":[{"type":"text","id":"Ozyb-1662033050066","leaves":[{"text":"3)UI空间和页面元素不能频繁变更","marks":[]}]}],"state":{}},{"type":"block","id":"vfTb-1662033050536","name":"paragraph","data":{},"nodes":[{"type":"text","id":"7ErD-1662033050068","leaves":[{"text":"4、UI自动化的应用场景","marks":[]}]}],"state":{}},{"type":"block","id":"fVdH-1662033050537","name":"paragraph","data":{},"nodes":[{"type":"text","id":"L6Ch-1662033050070","leaves":[{"text":"登录==》加入购物车==》下单 手工操作","marks":[]}]}],"state":{}},{"type":"block","id":"IqHE-1662033050538","name":"paragraph","data":{},"nodes":[{"type":"text","id":"soEc-1662033050072","leaves":[{"text":"==》可以用自动化去操作==》自动化回归测试","marks":[]}]}],"state":{}},{"type":"block","id":"4nS6-1662033050539","name":"paragraph","data":{},"nodes":[{"type":"text","id":"4bUx-1662033050074","leaves":[{"text":"5、UI自动化的覆盖率","marks":[]}]}],"state":{}},{"type":"block","id":"LUUy-1662033050540","name":"paragraph","data":{},"nodes":[{"type":"text","id":"YVLx-1662033050076","leaves":[{"text":"1)用例数量的覆盖率:站当前迭代用例总数的20% ==》是把主流程的用例转化为自动化","marks":[]}]}],"state":{}},{"type":"block","id":"Gr45-1662033050541","name":"paragraph","data":{},"nodes":[{"type":"text","id":"jTYJ-1662033050078","leaves":[{"text":"2)场景覆盖率:70-80%","marks":[]}]}],"state":{}},{"type":"block","id":"kvuh-1662033050542","name":"paragraph","data":{},"nodes":[{"type":"text","id":"lPlj-1662033050080","leaves":[{"text":"6、目前市面上主流程的ui自动化工具","marks":[]}]}],"state":{}},{"type":"block","id":"rEf-1662033050543","name":"paragraph","data":{},"nodes":[{"type":"text","id":"m3pn-1662033050082","leaves":[{"text":"1)python +selenium (要学习)","marks":[]}]}],"state":{}},{"type":"block","id":"Tywd-1662033050544","name":"paragraph","data":{},"nodes":[{"type":"text","id":"nDvc-1662033050084","leaves":[{"text":"2)java +selenium","marks":[]}]}],"state":{}},{"type":"block","id":"xHc7-1662033050545","name":"paragraph","data":{},"nodes":[{"type":"text","id":"KQaA-1662033050086","leaves":[{"text":"3)rebot framework +selenium2library","marks":[]}]}],"state":{}},{"type":"block","id":"XAle-1662033050546","name":"paragraph","data":{},"nodes":[{"type":"text","id":"p59S-1662033050088","leaves":[{"text":"7、UI自动化的框架","marks":[]}]}],"state":{}},{"type":"block","id":"ttDg-1662033050547","name":"paragraph","data":{},"nodes":[{"type":"text","id":"K2l-1662033050090","leaves":[{"text":"python +selenium +unittest +po 分层","marks":[]}]}],"state":{}},{"type":"block","id":"wRvw-1662033050548","name":"paragraph","data":{},"nodes":[{"type":"text","id":"bEU1-1662033050092","leaves":[{"text":"8、selenium 的优点 和缺点","marks":[]}]}],"state":{}},{"type":"block","id":"ubXN-1662033050549","name":"paragraph","data":{},"nodes":[{"type":"text","id":"HBC6-1662033050094","leaves":[{"text":"1)支持多平台 windows linux","marks":[]}]}],"state":{}},{"type":"block","id":"4fEI-1662033050550","name":"paragraph","data":{},"nodes":[{"type":"text","id":"KE6h-1662033050096","leaves":[{"text":"2)支持多浏览器 chrome 火狐 ie","marks":[]}]}],"state":{}},{"type":"block","id":"KknC-1662033050551","name":"paragraph","data":{},"nodes":[{"type":"text","id":"KCmS-1662033050098","leaves":[{"text":"3)支持多语言 python java","marks":[]}]}],"state":{}},{"type":"block","id":"NGPW-1662033050552","name":"paragraph","data":{},"nodes":[{"type":"text","id":"EXf5-1662033050101","leaves":[{"text":"缺点:只能做UI自动化 就是一个库","marks":[]}]}],"state":{}},{"type":"block","id":"H6oJ-1662033050553","name":"paragraph","data":{},"nodes":[{"type":"text","id":"InYW-1662033050103","leaves":[{"text":"9、selenium 安装","marks":[]}]}],"state":{}},{"type":"block","id":"WsJ6-1662033050554","name":"paragraph","data":{},"nodes":[{"type":"text","id":"NU9c-1662033050105","leaves":[{"text":"1)win +R ,输入cmd","marks":[]}]}],"state":{}},{"type":"block","id":"YX4w-1662033050555","name":"paragraph","data":{},"nodes":[{"type":"text","id":"znj7-1662033050107","leaves":[{"text":"2)进入python 安装路径,cd C:\\Python37\\Scripts 假如在d盘 输入d:","marks":[]}]}],"state":{}},{"type":"block","id":"mk0b-1662033050556","name":"paragraph","data":{},"nodes":[{"type":"text","id":"Zk9Z-1662033050109","leaves":[{"text":"3)输入 pip install selenium==3.141.0","marks":[]}]}],"state":{}},{"type":"block","id":"LYZi-1662033050557","name":"paragraph","data":{},"nodes":[{"type":"text","id":"rN1e-1662033050111","leaves":[{"text":"如果报错运行:python -m pip --upgrade pip 运行这个","marks":[]}]}],"state":{}},{"type":"block","id":"8rmI-1662033050558","name":"paragraph","data":{},"nodes":[{"type":"text","id":"pBhf-1662033050113","leaves":[{"text":"10、selenium项目了解","marks":[]}]}],"state":{}},{"type":"block","id":"ZJAz-1662033050559","name":"paragraph","data":{},"nodes":[{"type":"text","id":"p7nu-1662033050115","leaves":[{"text":"1)pip install python自带的安装工具","marks":[]}]}],"state":{}},{"type":"block","id":"iO9j-1662033050560","name":"paragraph","data":{},"nodes":[{"type":"text","id":"5JDk-1662033050117","leaves":[{"text":"2)dos 窗口使用 pip list ==》查看当前python安装了哪些第三方库","marks":[]}]}],"state":{}},{"type":"block","id":"8dPv-1662033050561","name":"paragraph","data":{},"nodes":[{"type":"text","id":"9Agt-1662033050119","leaves":[{"text":"3)pip安装好的库一般是在 C:\\Python37\\Lib\\site-packages 里面","marks":[]}]}],"state":{}},{"type":"block","id":"YRha-1662033050562","name":"paragraph","data":{},"nodes":[{"type":"text","id":"MUfd-1662033050121","leaves":[{"text":"11、selenium原理","marks":[]}]}],"state":{}},{"type":"block","id":"gjYv-1662033050563","name":"paragraph","data":{},"nodes":[{"type":"text","id":"G5Y3-1662033050123","leaves":[{"text":"1)selenium 库中有一个webdriver包,webdriver包里面有一个chrome包,里面有一个webdriver模块","marks":[]}]}],"state":{}},{"type":"block","id":"KxIw-1662033050564","name":"paragraph","data":{},"nodes":[{"type":"text","id":"QrmF-1662033050125","leaves":[{"text":"2)在C:\\Python37\\Scripts 放入 chromedriver.exe 驱动","marks":[]}]}],"state":{}},{"type":"block","id":"18Ov-1662033050565","name":"paragraph","data":{},"nodes":[{"type":"text","id":"McoN-1662033050127","leaves":[{"text":"12)selenium 中元素定位方法","marks":[]}]}],"state":{}},{"type":"block","id":"OGoB-1662033050566","name":"paragraph","data":{},"nodes":[{"type":"text","id":"SJIm-1662033050129","leaves":[{"text":"webdriver 模块提供了9种定位方法","marks":[]}]}],"state":{}},{"type":"block","id":"gtCZ-1662033050567","name":"paragraph","data":{},"nodes":[{"type":"text","id":"bCx0-1662033050131","leaves":[{"text":"①id 定位","marks":[{"type":"color","value":"#F33232"}]}]}],"state":{}},{"type":"block","id":"XkFH-1662033050568","name":"paragraph","data":{},"nodes":[{"type":"text","id":"0SNG-1662033050133","leaves":[{"text":"如果把元素定位看成一个人的话,id就是身份证 唯一 通过id属性定位","marks":[]}]}],"state":{}},{"type":"block","id":"LbX2-1662033050569","name":"paragraph","data":{},"nodes":[{"type":"text","id":"yUPZ-1662033050135","leaves":[{"text":"1、谷歌浏览器 f12","marks":[]}]}],"state":{}},{"type":"block","id":"NZLJ-1662033050570","name":"paragraph","data":{},"nodes":[{"type":"text","id":"dcn0-1662033050137","leaves":[{"text":"2、鼠标空白处右键点击检查","marks":[]}]}],"state":{}},{"type":"block","id":"yMqX-1662033050571","name":"paragraph","data":{},"nodes":[{"type":"text","id":"bsmq-1662033050139","leaves":[{"text":"②、name定位","marks":[{"type":"color","value":"#F33232"}]}]}],"state":{}},{"type":"block","id":"5rAJ-1662033050572","name":"paragraph","data":{},"nodes":[{"type":"text","id":"Ghll-1662033050141","leaves":[{"text":"name属性好比一个人的名字,可以重复,也可以唯一","marks":[]}]}],"state":{}},{"type":"block","id":"ZnHY-1662033050573","name":"paragraph","data":{},"nodes":[{"type":"text","id":"98xL-1662033050143","leaves":[{"text":"③class 定位","marks":[{"type":"color","value":"#F33232"}]}]}],"state":{}},{"type":"block","id":"pG0j-1662033050574","name":"paragraph","data":{},"nodes":[{"type":"text","id":"Rff1-1662033050145","leaves":[{"text":"class 和name差不多,可以重复 可以唯一","marks":[]}]}],"state":{}},{"type":"block","id":"i7sd-1662033050575","name":"paragraph","data":{},"nodes":[{"type":"text","id":"IdHr-1662033050147","leaves":[{"text":"④ xpath 定位","marks":[{"type":"color","value":"#F33232"}]}]}],"state":{}},{"type":"block","id":"NovY-1662033050576","name":"paragraph","data":{},"nodes":[{"type":"text","id":"sgYC-1662033050149","leaves":[{"text":"xpath 是通过路径定位元素(绝对路径和相对路径)","marks":[]}]}],"state":{}},{"type":"block","id":"9O1e-1662033050577","name":"paragraph","data":{},"nodes":[{"type":"text","id":"USpU-1662033050151","leaves":[{"text":"from selenium import webdriver #通过selenium库导入webdriver包","marks":[]}]}],"state":{}},{"type":"block","id":"YGFo-1662033050578","name":"paragraph","data":{},"nodes":[{"type":"text","id":"kp8H-1662033050154","leaves":[{"text":"from time import sleep","marks":[]}]}],"state":{}},{"type":"block","id":"QId4-1662033050579","name":"heading","data":{"version":1,"level":"h1"},"nodes":[]},{"type":"block","id":"iDKf-1662033050580","name":"paragraph","data":{},"nodes":[{"type":"text","id":"Tv0F-1662033050157","leaves":[{"text":"driver = webdriver.Chrome() #创建一个driver对象或者说一个浏览器对象,","marks":[]}]}],"state":{}},{"type":"block","id":"D5iG-1662033050581","name":"paragraph","data":{},"nodes":[{"type":"text","id":"6axG-1662033050159","leaves":[{"text":"# 打开一个空白的浏览器 通过webdriver模块调用了Chrome() 类","marks":[]}]}],"state":{}},{"type":"block","id":"e4uW-1662033050582","name":"paragraph","data":{},"nodes":[{"type":"text","id":"vlLI-1662033049723","leaves":[{"text":"driver.get(" ","marks":[]}]},{"type":"inline","id":"favd-1662033049725","name":"link","data":{"href":"http:="" www.baidu.com"},"nodes":[{"type":"text","id":"oqbp-1662033049724","leaves":[{"text":"http:="" www.baidu.com","marks":[]}]}]},{"type":"text","id":"vgul-1662033049744","leaves":[{"text":"')="" #打开百度","marks":[]}]}],"state":{}},{"type":"block","id":"cqgo-1662033050583","name":"paragraph","data":{},"nodes":[{"type":"text","id":"1rzj-1662033050162","leaves":[{"text":"driver.maximize_window()="" #窗口最大化","marks":[]}]}],"state":{}},{"type":"block","id":"m9jl-1662033050584","name":"paragraph","data":{},"nodes":[{"type":"text","id":"8vik-1662033050164","leaves":[{"text":"sleep(5)="" ","marks":[{"type":"color","value":"#f33232"}]},{"text":"="" #等待3s","marks":[]}]}],"state":{}},{"type":"block","id":"bgl2-1662033050585","name":"paragraph","data":{},"nodes":[{"type":"text","id":"pm5e-1662033050166","leaves":[{"text":"元素定位id","marks":[]}]}],"state":{}},{"type":"block","id":"s0mn-1662033050586","name":"paragraph","data":{},"nodes":[{"type":"text","id":"zjw8-1662033050168","leaves":[{"text":"1)id="" 定位法","marks":[{"type":"color","value":"#f33232"}]}]}],"state":{}},{"type":"block","id":"aboy-1662033050587","name":"paragraph","data":{},"nodes":[{"type":"text","id":"k9wi-1662033050170","leaves":[{"text":"driver.find_element_by_id('kw').send_keys('python')","marks":[]}]}],"state":{}},{"type":"block","id":"5dqr-1662033050588","name":"paragraph","data":{},"nodes":[{"type":"text","id":"sl0j-1662033050172","leaves":[{"text":"2)name定位法","marks":[{"type":"color","value":"#f33232"}]}]}],"state":{}},{"type":"block","id":"lpyx-1662033050589","name":"paragraph","data":{},"nodes":[{"type":"text","id":"5vae-1662033050174","leaves":[{"text":"driver.find_element_by_name('wd').send_keys('python')","marks":[]}]}],"state":{}},{"type":"block","id":"mlta-1662033050590","name":"paragraph","data":{},"nodes":[{"type":"text","id":"simu-1662033050176","leaves":[{"text":"3)class="" 定位法","marks":[{"type":"color","value":"#f33232"}]}]}],"state":{}},{"type":"block","id":"pqw0-1662033050591","name":"paragraph","data":{},"nodes":[{"type":"text","id":"xnzm-1662033050178","leaves":[{"text":"driver.find_element_by_class_name('s_ipt').send_keys('python')","marks":[]}]}],"state":{}},{"type":"block","id":"re3g-1662033050592","name":"paragraph","data":{},"nodes":[{"type":"text","id":"wi6v-1662033050180","leaves":[{"text":"4)link_text="" 定位链接","marks":[{"type":"color","value":"#f33232"}]}]}],"state":{}},{"type":"block","id":"lipj-1662033050593","name":"paragraph","data":{},"nodes":[{"type":"text","id":"e2dj-1662033050182","leaves":[{"text":"driver.find_element_by_link_text('hao123').click()="" #点击链接","marks":[]}]}],"state":{}},{"type":"block","id":"wkfp-1662033050594","name":"paragraph","data":{},"nodes":[{"type":"text","id":"5dyb-1662033050184","leaves":[{"text":"5)partial_link_text="" 模糊匹配","marks":[{"type":"color","value":"#f33232"}]}]}],"state":{}},{"type":"block","id":"vnjs-1662033050595","name":"paragraph","data":{},"nodes":[{"type":"text","id":"msqt-1662033050186","leaves":[{"text":"driver.find_element_by_partial_link_text('123').click()","marks":[]}]}],"state":{}},{"type":"block","id":"emjv-1662033050596","name":"paragraph","data":{},"nodes":[{"type":"text","id":"dx5x-1662033050188","leaves":[{"text":"6)javascript="" 定位,var="" 是javascript里面定义变量的="" a="" 是变量","marks":[{"type":"color","value":"#f33232"}]}]}],"state":{}},{"type":"block","id":"xs9s-1662033050597","name":"paragraph","data":{},"nodes":[{"type":"text","id":"fopa-1662033050190","leaves":[{"text":"js="var a =document.getElementById(\"kw\").value=\"python\"" ","marks":[]}]}],"state":{}},{"type":"block","id":"fe3j-1662033050598","name":"paragraph","data":{},"nodes":[{"type":"text","id":"ft9q-1662033050192","leaves":[{"text":"driver.execute_script(js)="" #执行","marks":[]}]}],"state":{}},{"type":"block","id":"8kpo-1662033050599","name":"paragraph","data":{},"nodes":[{"type":"text","id":"f9mq-1662033050194","leaves":[{"text":"7)tag_name="" 定位","marks":[{"type":"color","value":"#f33232"}]}]}],"state":{}},{"type":"block","id":"gdfd-1662033050600","name":"paragraph","data":{},"nodes":[{"type":"text","id":"mjnh-1662033050196","leaves":[{"text":"s="driver.find_element_by_tag_name('input')" #这个只适合一个input标签","marks":[]}]}],"state":{}},{"type":"block","id":"s2g5-1662033050601","name":"paragraph","data":{},"nodes":[{"type":"text","id":"ejyc-1662033050198","leaves":[{"text":"s="driver.find_elements_by_tag_name('input')" #定位input标签放到列表中","marks":[]}]}],"state":{}},{"type":"block","id":"7og5-1662033050602","name":"paragraph","data":{},"nodes":[{"type":"text","id":"rnxa-1662033050200","leaves":[{"text":"print(type(s))="" #数据类型1、什么是UI自动化
原本用手工操作ui页面的方式,现在用代码去实现自动化操作的方式
2、UI自动化的优点
1)解决重复性功能测试和验证
2)减少回归测试的人力 时间
3)减少回归测试时漏测的现象
3、什么样的项目适合做UI自动化
1)需要比较稳定,需求变更不频繁
2)项目周期比较长
3)UI空间和页面元素不能频繁变更
4、UI自动化的应用场景
登录==》加入购物车==》下单 手工操作
==》可以用自动化去操作==》自动化回归测试
5、UI自动化的覆盖率
1)用例数量的覆盖率:站当前迭代用例总数的20% ==》是把主流程的用例转化为自动化
2)场景覆盖率:70-80%
6、目前市面上主流程的ui自动化工具
1)python +selenium (要学习)
2)java +selenium
3)rebot framework +selenium2library
7、UI自动化的框架
python +selenium +unittest +po 分层
8、selenium 的优点 和缺点
1)支持多平台 windows linux
2)支持多浏览器 chrome 火狐 ie
3)支持多语言 python java
缺点:只能做UI自动化 就是一个库
9、selenium 安装
1)win +R ,输入cmd
2)进入python 安装路径,cd C:\Python37\Scripts 假如在d盘 输入d:
3)输入 pip install selenium==3.141.0
如果报错运行:python -m pip --upgrade pip 运行这个
10、selenium项目了解
1)pip install python自带的安装工具
2)dos 窗口使用 pip list ==》查看当前python安装了哪些第三方库
3)pip安装好的库一般是在 C:\Python37\Lib\site-packages 里面
11、selenium原理
1)selenium 库中有一个webdriver包,webdriver包里面有一个chrome包,里面有一个webdriver模块
2)在C:\Python37\Scripts 放入 chromedriver.exe 驱动
12)selenium 中元素定位方法
webdriver 模块提供了9种定位方法
①id 定位
如果把元素定位看成一个人的话,id就是身份证 唯一 通过id属性定位
1、谷歌浏览器 f12
2、鼠标空白处右键点击检查
②、name定位
name属性好比一个人的名字,可以重复,也可以唯一
③class 定位
class 和name差不多,可以重复 可以唯一
④ xpath 定位
xpath 是通过路径定位元素(绝对路径和相对路径)
from selenium import webdriver #通过selenium库导入webdriver包
from time import sleep
driver = webdriver.Chrome() #创建一个driver对象或者说一个浏览器对象,
# 打开一个空白的浏览器 通过webdriver模块调用了Chrome() 类
driver.get('http://www.baidu.com') #打开百度
driver.maximize_window() #窗口最大化
sleep(5) #等待3s
元素定位id
1)id 定位法
driver.find_element_by_id('kw').send_keys('python')
2)name定位法
driver.find_element_by_name('wd').send_keys('python')
3)class 定位法
driver.find_element_by_class_name('s_ipt').send_keys('python')
4)link_text 定位链接
driver.find_element_by_link_text('hao123').click() #点击链接
5)partial_link_text 模糊匹配
driver.find_element_by_partial_link_text('123').click()
6)JavaScript 定位,var 是JavaScript里面定义变量的 a 是变量
js = 'var a =document.getElementById("kw").value="python"'
driver.execute_script(js) #执行
7)tag_name 定位
s = driver.find_element_by_tag_name('input') #这个只适合一个input标签
s = driver.find_elements_by_tag_name('input') #定位input标签放到列表中
print(type(s)) #数据类型
print(len(s)) #17
for i in s:
if i.get_attribute('id')=='kw':
#i 就是一个一个input标签,当判断是百度输入框的那个input就输入python
i.send_keys('python')
8)xpath 定位
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('python')
driver.find_element_by_xpath('//*[@name="wd"]').send_keys('python')
driver.find_element_by_xpath('//*[@class="s_ipt"]')
driver.find_element_by_xpath('//*[@name="wd" and @class="s_ipt"]').send_keys('python') #组合标签
driver.find_element_by_xpath('//*[@autocomplete="off"]').send_keys('python')
driver.find_element_by_xpath('//*[@id="form"]/span[1]/input[1]').send_keys('python')
#id = form 是input的上上级,input的上级是span标签,span是form下第一个标签再
下面的第一个input
9)css定位
driver.find_element_by_css_selector('#kw').send_keys('python') #id选择器定位
driver.find_element_by_css_selector('.s_ipt').send_keys('python') #class选择器
driver.find_element_by_css_selector('[name=wd]').send_keys('python')
driver.find_element_by_css_selector('[class=s_ipt]').send_keys('python')
driver.find_element_by_css_selector('[name=wd][class=s_ipt]').send_keys('python') #组合选择器
driver.find_element_by_css_selector('[autocomplete=off]').send_keys('python')
driver.find_element_by_css_selector('span>input').send_keys('python') #找上级
driver.find_element_by_css_selector('form>span>input').send_keys('python') #找上上级 找上上级标签
10)
1、定位文本框和密码框
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('http://cms.duoceshi.cn/cms/manage/login.do')
driver.maximize_window()
sleep(3)
driver.find_element_by_id('userAccount').send_keys('admin')
driver.find_element_by_id('loginPwd').send_keys('123456')
driver.find_element_by_id('loginBtn').click() #点击登录按钮
2、通过send_keys方法上传文件
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('file:///D:/lesson2/%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E7%9A%84%E8%AF%BE%E4%BB%B6/20.11.16%E5%8F%B7-18%E5%8F%B7%20%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%9C%88%E4%B9%8B%E7%AC%AC11%E8%AE%B2%EF%BC%9A%E5%A4%9A%E6%B5%8B%E5%B8%88ui%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E4%B9%8Bselenium/elem/upload_file.html')
driver.maximize_window()
sleep(3)
第一种方法
driver.find_element_by_id('file').send_keys(r'C:\Users\Administrator\Desktop\data.csv')
第二种方法
ele =driver.find_element_by_id('file')
ele.send_keys(r'C:\Users\Administrator\Desktop\data.csv')
3、定位百度隐藏框
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains #ActionChains 类
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
sleep(3)
第一种方法
点击设置==》然后选择搜索设置
driver.find_element_by_id('s-usersetting-top').click() #点击设置
driver.find_element_by_link_text('搜索设置').click() #点击设置后再搜索设置哪里右键检查定位
sleep(2)
第二种方法 模拟 mouse orver 鼠标悬浮
mouse = driver.find_element_by_id('s-usersetting-top') #定位赋值给mouse
ActionChains(driver).move_to_element(mouse).perform()
#move_to_element 就是鼠标移动到设置上面 perform() 执行这个操作
driver.find_element_by_link_text('搜索设置').click()
sleep(2)
driver.find_element_by_link_text('保存设置').click() #点击保存设置
sleep(2)
alert = driver.switch_to.alert #进入到alert弹框
print(alert.text) #打印弹框的信息 打印文本 已经记录下您的使用偏好
alert.accept() #点击确定按钮
alert.dismiss() #点机取消按钮
4、selenium 当中的等待
'''
1 线程等待 sleep(5) 不管有没有加载出来都会等待5s 强制等待
2 隐式等待 implicitly_wait(5) 智能等待,作用域全局,如果再5s内全部网页元素加载完成则继续
往下执行,超过5s则报错
3 显示等待 WebDriverWait 只作用于特定的元素,每个几秒去刷新和寻找页面元素,如果找不到
则往下执行,超过5s则报错
'''
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait #导入显示等待的包
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
sleep(3) #线程等待
driver.implicitly_wait(5) #隐式等待
driver.find_element_by_id('kw').send_keys('python')
WebDriverWait(driver,5,poll_frequency=0.5).until(EC.presence_of_all_elements_located((By.ID,'su')))
driver.find_element_by_id('su').click() #点击百度按钮
sleep(5)
driver.close()
5 获取text文本信息和title
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
# 1)获取文本
value = driver.find_element_by_xpath('//*[@id="s-top-left"]/a[2]').text #获取页面元素
if value=='hao123':
print('获取成功')
else:
print('获取失败')
2)获取title
断言
title = driver.title #获取标题
print(title)
if title =='百度一下,你就知道':
print('获取成功')
else:
print('获取失败')
assert title=='百度一下,你就知道' #不会有打印结果
6 刷新窗口 打开一个新的窗口 返回上一步 获取窗口大小
1)获取窗口大小
size = driver.get_window_size()
print(size) #{'width': 1296, 'height': 696}
# 2)返回上一步
driver.find_element_by_id('kw').send_keys('python')
sleep(5)
driver.find_element_by_id('su').click()
sleep(3)
driver.back() #返回上一步
sleep(3)
# 3)刷新窗口
driver.refresh()
# 4)打开一个新窗口
win = 'window.open("http://www.jd.com")'
driver.execute_script(win)
7) 切换窗口
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
打开第一个窗口
driver.get('http://www.baidu.com')
driver.maximize_window()
打开第二个窗口
win = 'window.open("http://www.jd.com")'
driver.execute_script(win)
title = driver.title
print(title) #百度一下,你就知道 当前主窗口是百度
handle = driver.current_window_handle #获取当前主窗口百度的句柄
#句柄:是一个用来标识的对象
print(handle) #CDwindow-2F4444FCA95D218C0104681A947B0BD1
all_handle = driver.window_handles #获取所有窗口的句柄
print(all_handle) #['CDwindow-39CFEA72D8404179150BE6545D76468C', 'CDwindow-6B373C86709BEC4ABF146808CAE46B97']
1)通过索引取值去切换窗口
driver.switch_to.window(all_handle[1]) #切换窗口
title1 = driver.title
print(title1) # 京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!
2)通过for循环
for i in all_handle:
if i !=handle: #判断如果i 不是当前百度句柄,那就切换窗口
driver.switch_to.window(i) #切换京东窗口
title2 = driver.title
print(title2) #京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!
|
|