selenium基础操作
作者:互联网
1、selenium的介绍
selenium支持web浏览器的自动化;主要由三个工具构成: webdriver、IDE、Grid
2、selenium环境配置步骤
准备好python环境;准备好selenium环境;下载浏览器对应的driver版本;driver配置环境变量;在python中import对应的依赖
3、selenium的安装
配置好python环境;配置好pip工具;pip install selenium;或者在pycharm直接安装
4、driver的配置
5、python中selenium的使用
import selenium
from selenium import webdrver
def test_selenium():
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
6、用例的关键要素
导入依赖;创建driver;执行自动化步骤;断言
7、三种等待方式
直接等待:强制等待,线程休眠一定时间:time.sleep(3);
隐式等待:设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常:self.driver.implicitly_wait(3);
显式等待:在代码中定义等待条件,当条件发生时才继续执行代码;WebDriverWait 配合 until()和until_not()方法,根据判断条件进行等待;程序每隔一段时间(默认为0.5秒)进行条件判断,如果条件成立,则执行下一步,否则继续等待,直到超过设置的最长时间;
8、XPATH概念及应用
9、CSS的概念及应用
10、Actions
ActionChains:执行PC端的鼠标点击,双击,右键,拖拽等事件;
TouchActions:模拟PC和移动端的点击、滑动、拖拽,多点触控等多种手势操作;
11、动作链接ActionChains
执行原理:调用ActionChains的方法时,不会立即执行,而是将所有的操作,按顺序存放在一个队列里,当你调用perform()方法时,队列中的事件会依次执行;
基本用法:生成一个动作action = ActionChains(driver);动作添加方法1 action.方法1;动作添加方法2 action.方法2;调用perform()方法执行(action.perform())
基本写法:链式写法:ActionChains(driver).move_to_element(element).click(element).perform();
分布写法:actions = ActionChains(driver)
actions.move_to_element(element)
actions.click(element)
actions.perform()
ActionChains用法1:点击,右键,双击操作
action = ActionChains(driver)
action.click(element)
action.double_click(element)
action.context_click(element)
action.perform()
ActionChains用法2:鼠标移动到某个元素上:
action = ActionChains(self.driver)
action.move_to_element(element)
action.perform()
ActionChains用法3:模拟按键方法:模拟按键有多种方法,能用win32api来实现,能用SendKeys来实现,也可以用selenium的WebElement对象的send_keys()方法来实现,这里ActionChains类也提供了几个模拟按键的方法;
Action = ActionChains(driver)
action.send_keys(Keys.BACK_SPACE)
action.key_down(Keys.CONTROL).send_keys('a').key_up(Key.CONTROL)
action.perform()
12、TouchAction
类似于ActionChains,ActionChains只是针对PC端程序鼠标模拟的一系列操作,对H5页面操作时无效的,TouchAction可以对H5页面操作,通过TouchAction可以实现点击,滑动拖拽,多点触控,以及模拟手势的各种操作;
手势控制:tap --- 在指定元素上敲击
double_tap ---在指定元素上双敲击
tap_and_hold --- 在指定元素上点击但不释放
move --- 手势移动指定偏移(未释放)
release --- 释放手势
scroll --- 手势点击并滚动
scroll_from_element --- 从某个元素位置开始手势点击并滚动(向下滚动为负数,向上滑动为正数)
long_press --- 长按元素
flick --- 手势滑动
flick_element --- 从某个元素开始手势滑动(向上滑动为负数,向下滑动为正数)
Perform — 执行
13、表单定义
表单是一个包含表单元素的区域;
表单元素是允许用户在表单中(比如:文本域、下拉列表、单选框、复选框等)输入信息的元素;
表单使用表单标签(<form>)定义,比如:<form><input /></form>;
操作表单元素步骤:
首先要定位到表单元素;
然后去操作元素(清空,输入或者点击等)
14、多窗口处理
点击某些链接,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口;获取窗口的唯一标识用句柄表示,所以只需要切换句柄,就可以在多个页面灵活操作了;
多窗口处理流程:
1.先获取到当前的窗口句柄(driver.current_window_handle)
2.再获取到所有窗口句柄(driver.window_handles)
3.判断是否是想要操作的窗口,如果是,就可以对窗口进行操作,如果不是,跳转到另外一个窗口,对另一个窗口进行操作(driver.switch_to_window);
15、frame介绍
frame是HTML中的框架,在HTML中,所谓的框架就是可以在同一个浏览器中显示不止一个页面;
基于HTML的框架,又分为垂直框架和水平框架(cols,rows)
frame分类:
frame标签包含frameset、frame、iframe三种,frameset和普通的标签一样,不会影响正常的定位,可以使用index、id、Neme、webelement任意种方式定位;而frame和iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作
多frame切换:
frame存在两种:嵌套的,未嵌套的;
切换frame:
driver.switch_to.frame() # 根据元素id或者index切换frame
driver.switch_to.default_content() # 切换到默认frame
driver.switch_to.parent_frame() # 切换到父级frame
未嵌套切换frame:
driver.switch_to_frame(“frame 的 id”)
driver.switch_to_frame(“frame - index”)frame无ID的时候根据索引来处理,索引从0开始driver.switch_to_frame(0)
嵌套切换frame:
对于嵌套的先进入到iframe的父节点,再进到子节点,然后就可以对子节点里面的对象进行处理和操作;
driver.switch_to.frame(“父节点”)
driver.switch_to.frame(“子节点")
16、js的处理
selenium能够执行js,这使得selenium拥有更为强大的能力;
直接使用js操作页面,能解决很多click()不生效的问题;
js代码:
document.getElementById("su”)
window.alert(’selenium弹框测试’)
a = document.getElementById(‘kw’).value
document.title
JSON.stringify(performance.timing)
document.documentElement.scrollTop=1000
selenium调用:
driver.execute_script(“window.alert(’selenium弹框测试’)”)
driver.execute_script(“a = document.getElementById(‘kw’).value;window.alert(a)”)
driver.execute_script(“return document.getElementById(‘id’).value”)
大部分时间控件都是readonly属性,需要手动去选择对应的时间,手工测试中很容易做到,自动化中对控件的操作可以使用Js来操作;
处理时间控件思路:
1.取消日期的readonly属性;2.给value赋值;3.写js代码来实现如上的1、2点,再webdriver对js进行处理;
17、文件上传
input标签可以直接使用send_keys(文件地址)上传文件
用法:ele = driver.find_element_by_id(‘上传按钮id’)
ele.send_keys(‘文件路径+文件名’)
18、弹框处理机制
在页面操作中有时会遇到JavaScript生成的alert、confirm、以及prompt弹框,可以使用Switch_to()方法定位到;然后使用text/accept/send_keys等方法进行操作;
操作alert常用方法:
switch_to.alert():获取当前页面上的警告框;
text:返回文字信息;
accept():接受现有警告框;
dismiss():解散现有警告框;
send_keys(keysToSend):发送文本至警告框;
19、PageObject原则
参考selenium官方文档;
原则解读:
方法意义:用公共方法代表UI所提供的功能;
方法应该返回其他的PageObject或者返回用于断言的数据;
同样的行为不同的结果可以建模为不同的方法;
不要在方法内添加断言;
字段意义:
不要暴露页面内部的元素给外部;
不需要建模UI内的所有元素;
20、复用已有浏览器
需要退出当前所有的谷歌浏览器;找到chrome的启动路径;配置环境变量;
启动命令:windows:chrome --remote-debugging-port=9222
Mac:chrome --remote-debugging-port=9222
访问http://localhost:9222
21、使用cookie
driver.get(url)
driver.delete_all_cookies()
for cookie in cookies:
driver.add_cookie(cookie)
driver.refresh()
标签:ActionChains,selenium,frame,driver,element,基础,action,操作 来源: https://blog.csdn.net/qq_44336529/article/details/118490815