一、工具:
selenium
二、元素定位:
方式一:通过元素的id (一个id值是唯一的,只属于一个元素)
方式二:通过元素的class
方式三:通过元素的name
方式四:通过超链接文本by_link_text (是精确匹配,需要文本完全相同才能匹配)
方式五:通过超链接文本(模糊匹配)by_partial_link_text
方式六:通过元素标签tag_name
方式七:通过css选择器
方式八:xpath(万能,稳定,重点)
Xpath表达式:
xpath语法规则:
/ 根节点,节点分隔符, //任意位置
- 任意元素 @属性
. 当前节点 ..父级节点
text 文本值
格式:
属性://[@属性='属性值']
文本值://[text()='文本值']
高级查询:
contains模糊查询:contains(@属性/text(), 值)]
starts-with 匹配一个属性开始位置的关键字
三、浏览器常用基本操作
刷新页面: driver.refresh()
获取浏览器窗口大小:driver.get_window_size()
设置浏览器窗口大小:driver.set_window_size()
浏览器最大化窗口:driver.maximize_window()
浏览器全屏:driver.fullscreen_window()
获取浏览器窗口个数:driver.get_window_handle
len(driver.window_handles)
切换到指定窗口: 先获取窗口列表:all_window=driver.window_handles
切换窗口参数:切换到第几个,索引从0开始:driver.switch_to.window(all_window[1])
前进:driver.forward()
后退:driver.back()
关闭:driver.close() 关闭当前窗口
退出:driver.quit() 完全退出浏览器
关闭alert弹窗,confirm弹窗处理:driver.switch_to.alert.accept()
driver.save_screenshot(‘./test.png’)截图
四、web自动化测试常见报错分析
1、检查元素的定位是否写正确
2、页面元素进行获取的时候查看是否已经加载出来,(等待时间)
3、元素在页面上不可见,需要拖动下拉框或者放大窗口
4、页面元素在iframe标签里面
5.元素需要切换到新窗口
6.元素隐藏(js元素隐藏属性更改为可见)
五、切换frame
1.通过frame的名字
driver.switch_to.frame('frame_name')frame的名字
driver.switch_to.frame('login_frame')
2.通过索引
driver.switch_to.frame(1)索引从0开始
如何判断页面中有多个frame标签,并知道需要定位的frame标签是第几个?
答:可以在页面开发者工具中,CTRL+F 中输入//iframe,就可以显示所有iframe标签,切换标签后,
到哪个标签,目标位置显示蓝色,就是第几个。
3.通过webelement(元素定位的结果)
driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="login_frame"]'))
4.通过id的值
driver.switch_to.frame('login_frame')
退出frame:如果在frame里面操作元素,再想回到主页面里面进行元素操作,就必须先退出当前的frame
driver.switch_to.default_content()
六、三种等待时间
1.强制等待
导入:from time import sleep
调用:sleep(3):强制等待3秒
2.隐式等待(implicitly_wait)
driver.implicitly_wait(10)
在10s时间内,页面加载完成,进行下一步操作
3.显式等待
导入:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
调用:
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//[@rows="4"]')))
匿名函数:
WebDriverWait(driver,16).until(lambda x : x.find_element(By.XPATH,'//[@rows="4"]')
七、键盘操作
所有的键盘操作都是通过 send_keys()里面通过改变参数实现的。
在使用键盘按键方法前需要先导入 keys 类包:
from selenium.webdriver.common.keys import Keys
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.COMMAND) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)
send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)
send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘F1
send_keys(Keys.F5) 键盘F5
send_keys(Keys.F12) 键盘F12
八、鼠标操作
操作都包含在ActionChains 类中,所以要模拟鼠标操作是首先要导入ActionChains。
在使用鼠标操作前需要先导入ActionChains类包:
from selenium.webdriver.common.action_chains import ActionChains
- click( ele ) 鼠标左键单击
- context_click( ele ) 鼠标右键单击
- double_click( ele ) 鼠标左键双击
- drag_and_drop( source,target ) 拖动到某个元素后松开
- move_to_element( ele ) 鼠标悬停在一个元素上
- click_and_hold( ele ) 鼠标左键单击,不松开
- release() 在某个元素上松开鼠标左键
- perform() 执行上述鼠标操作
对ActionChains类进行实例化对象操作,调用操作(元素)方法,再执行操作perform方法
网友评论