web界面:
html:内容的表达
css:样式布局
javascript:动态处理页面+用户响应
元素有3个特征:标签名,属性,文本内容
style:内联样式,直接在元素上通过style属性来设置样式,display:none 表示不显示
id:唯一性
class:不是唯一,可以有多个class值,中间空格隔开
name:不是唯一
元素的状态:
存在:存在html中
可见:在存在html的前提下,有可见和不可见
可用:在可见的前提下,元素有可用和不可用
8位定位方式 - html页面
定位:在整个html中根据元素特色去找;
id:元素id的属性
class:元素的class属性
tag:元素的tag属性
name:元素的name属性
针对a元素:
link_text:针对a元素的文本内容 -完全匹配
partial_link_text:针对a元素的文本内容- 包含
xpath
css
#selenium介绍与安装
selenium --工具包
selenium ide :录制工具
webdriver:第三方库,结合代码使用
grid:分布式
安装第三方库: pip install -U selenium
web自动化环境:
人----浏览器----操作页面
代码----浏览器----操作页面
浏览器驱动:
ie: ieserverdriver
chrome:chromedriver
firefox: fgeckodriver
附上 浏览器驱动下载地址汇总:
http://npm.taobao.org/mirrors/chromedriver/ #镜像
Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads .
国内镜像地址:http://npm.taobao.org/mirrors/chromedriver/
Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox: https://github.com/mozilla/geckodriver/releases
Safari: https://webkit.org/blog/6900/webdriver-support-in-safari-10/
1、引入第三方库
from selenium import webdriver
from selenium.webdriver.common.by import By
2、打开浏览器
driver = webdriver.Chrome()
3、访问页面,如:百度
driver.get("http://www.baidu.com")
sleep(5)
#关闭当前窗口,不会清除临时文件夹中的 WebDriver 临时文件
driver.close()
关闭浏览器,关闭会话,删除临时文件夹
driver.quit()
#如果只有一个窗口那么quit()和 close()没有区别
-------------------------扩展------------------------------------
# 根据xpath选择元素
driver.find_element(By.XPATH, '//*[@id="kw"]')
# 根据css选择器选择元素
driver.find_element(By.CSS_SELECTOR, '#kw')
# 根据name属性值选择元素
driver.find_element(By.NAME, 'wd')
# 根据类名选择元素
driver.find_element(By.CLASS_NAME, 's_ipt')
# 根据链接文本选择元素
driver.find_element(By.LINK_TEXT, 'hao123')
# 根据包含文本选择
driver.find_element(By.PARTIAL_LINK_TEXT, 'hao')
# 根据标签名选择
# 目标元素在当前html中是唯一标签或众多标签第一个时候使用
driver.find_element(By.TAG_NAME, 'title')
# 根据id选择
driver.find_element(By.ID, 'su')
element.size #获取窗口大小
element.title #获取浏览器title
dr.refresh() #刷新页面
time.sleep(2)
dr.back() #后退
time.sleep(2)
dr.forward() #前进
# action = ActionChains(dr) #实例化鼠标对象
# action.context_click(el) #在元素上右键
# action.move_to_element(el) #鼠标悬停
# action.perform() # 鼠标执行操作!!!不执行没效果
el.send_keys(Keys.BACK_SPACE) #删除键,单个字符删除
sleep(.5)
el.send_keys(Keys.BACK_SPACE)
sleep(.5)
el.send_keys(Keys.BACK_SPACE)
sleep(2)
el.send_keys(Keys.CONTROL,'a') #全选
sleep(.5)
el.send_keys(Keys.CONTROL,'x') #剪切
sleep(1)
el.send_keys(Keys.CONTROL,'v') #粘贴
参考网站:自动化测试——selenium(完结篇)
设置隐式等待
driver.implicitly_wait(30)
运行时,当遇到报错“"no such element:Unable to locate element"”,先检查元素是否正确,如果是正确的,那么元素还没有加载出来,此时没有找到
就会遇到异常,此时需要等待元素加载;
等待方式:
1、sleep:强制等待
2、implicitly_wait:隐形式等待
元素在iframe中(即html页面中嵌套了一个html(iframe)
1、分辨元素是否在iframe当中
2、在代码当中,从当前的html,切换到iframe当中的html,然后再找元素
driver.switch_to.frame(索引/name属性/webelement对象)
如:iframe = driver.find_element_by_xpath('//*[@id="x-URS-iframe1676947929737.601"]') #先找到该iframe XPATH,然后切换
driver.switch_to.frame(iframe)
----窗口切换:
在一个html点击某一个链接跳转打开新的窗口: driver.switch_to.window(句柄)
1.获取当前会话浏览器的所有窗口**
所有窗口句柄(列表) wins =driver.window_handles
2.切换到指定窗口
driver.switch_to.window(wins[-1]) #列表最后一个是最新的窗口
实例:
#打开百度,输入python,点击搜索 from selenium import webdriver import time from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
dr = webdriver.Chrome() dr.get("http://www.baidu.com") # dr.get("http://172.16.200.41/warning-fault") dr.maximize_window() time.sleep(2) #1、搜索框中输入‘python'并进行搜索 dr.find_element(By.ID,'kw').send_keys('python') dr.find_element(By.ID,'su').click() time.sleep(5) # dr.find_element(By.XPATH,"//a[text()='简介 | 菜鸟教程']").click() #2、点击搜索结果中“简介 | 菜鸟教程”,跳转打开新的窗口 loc=(By.XPATH,'//*[@id="9"]/div/div[1]/h3/a') wait = WebDriverWait(dr,5) wait.until(EC.visibility_of_element_located(loc)) dr.find_element(*loc).click() #3、切换到新窗口 time.sleep(1) win_hans =dr.window_handles #列表,获取当前会话浏览器的所有窗口 dr.switch_to.window(win_hans[-1]) print('获取所有窗口句柄:',win_hans) print('当前窗口句柄:',dr.current_window_handle)
time.sleep(5) #4、在新的窗口中进行操作 dr.find_element(By.XPATH,"//a[text()='HTML']").click() time.sleep(2) # dr.switch_to.window(win_hans[0]) #可再次切回到主窗口 time.sleep(2) dr.quit()
|
---Alert 弹框处理
在页面中操作时弹出alert弹框时,却不能往下进行操作,需要先把alert弹框关闭后才能进行下去;
#切换
al = drvier.switch_to.alert
#关闭弹框
al.accept()
>>>更多参考:http://testingpai.com/article/1596527701066
-----鼠标操作
示例:
#百度示例操作 from selenium.webdriver import ActionChains from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep # action = ActionChains(dr) #实例化鼠标对象 # action.context_click(el) #在元素上右键 # action.move_to_element(el) #鼠标悬停 # action.perform() # 鼠标执行操作!!!不执行没效果 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait
dr =webdriver.Chrome() dr.get("http://www.baidu.com") dr.maximize_window() sleep(2) loc = (By.XPATH,"//*[@id='s-usersetting-top']") el = dr.find_element(*loc) sleep(2) #鼠标实例化 action = ActionChains(dr) action.move_to_element(el) #或 action.move_to_element(el).click(el) action.perform() # 鼠标执行操作!!!不执行没效果 #获取’高级搜索‘元素并点击 loc =(By.XPATH,'//span[text()="高级搜索"]') wait = WebDriverWait(dr,5) wait.until(EC.visibility_of_element_located(loc)) dr.find_element(*loc).click() sleep(2) #点击出现下拉列表 loc =(By.XPATH,"//span[@id='adv-setting-ft']//div[contains(@class,'adv')]") wait = WebDriverWait(dr,5) wait.until(EC.visibility_of_element_located(loc)) dr.find_element(*loc).click() #等待下拉列表出现后,选择一个元素并点击 loc =(By.XPATH,'//p[@data-value="xls"]') wait = WebDriverWait(dr,5) wait.until(EC.visibility_of_element_located(loc)) dr.find_element(*loc).click() sleep(2) dr.quit()
#------扩展-----
# s = Select(el) # s.select_by_index(1) #通过索引index获取值,从 0开始 # s.select_by_value('02') #通过value值获取 # s.select_by_visible_text('王维') #通过文本方式选择目录信息值 # print(el.size) #获取窗口大小
|