IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> selenium自动化测试 -> 正文阅读

[开发测试]selenium自动化测试

一、元素操作方法

1、.send_keys() # 输入方法

2、.click() # 点击方法

3、.clear() # 清空方法

#d导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
#实例化驱动对象
driver=webdriver.Chrome()
#打开浏览器
driver.get('file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html')
#输入操作
driver.find_element(By.CSS_SELECTOR,'#userA').send_keys('admin')
driver.find_element(By.CSS_SELECTOR,"#passwordA").send_keys("123456")
driver.find_element(By.CSS_SELECTOR,"p>#telA").send_keys("18512829605")
driver.find_element(By.CSS_SELECTOR,"p>.emailA").send_keys("1449407849@qq.com")
#强制等待1秒
sleep(1)
#清除操作
driver.find_element(By.CSS_SELECTOR,'#userA').clear()
#强制等待1秒
sleep(1)
#点击操作
driver.find_element(By.LINK_TEXT,"新浪").click()
#强制等待2秒
sleep(2)
#关闭驱动对象
driver.quit()

二、浏览器操作方法

1、driver.maximize_window() ?# 最大化浏览器
2、driver.set_window_size(w,h) ?# 设置浏览器大小 单位像素?
3、driver.set_window_position(x,y) ?# 设置浏览器位置??
4、driver.back() # 后退操作
5、driver.forward() # 前进操作
6、driver.refrensh() # 刷新操作
7、driver.close() # 关闭当前主窗口(主窗口:默认启动那个界面,就是主窗口)
8、driver.quit() # 关闭driver对象启动的全部页面
9、driver.title # 获取当前页面title信息
10、driver.current_url # 获取当前页面url信息

#导包
from selenium.webdriver.common.by import By
from selenium import webdriver
from time import sleep
#实例化驱动对象
driver=webdriver.Chrome()
#打开浏览器
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html?userA=123&passwordA=&telA=&emailA=&selecta=bj&fruit=lia&hobby=%E6%97%85%E6%B8%B8&upfilea=")
#窗口最大化
driver.maximize_window()
sleep(2)
#设置大小
driver.set_window_size(500,500)
sleep(2)
#设置浏览器窗口位置
driver.set_window_position(300, 300)
sleep(3)
#窗口最大化
driver.maximize_window()
driver.find_element(By.LINK_TEXT,'新浪').click()
sleep(2)
#刷新
driver.refresh()
sleep(2)
#后退
driver.back()
sleep(2)
#前进
driver.forward()
sleep(2)
#后退
driver.back()
sleep(2)
#打开浏览器
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html?userA=123&passwordA=&telA=&emailA=&selecta=bj&fruit=lia&hobby=%E6%97%85%E6%B8%B8&upfilea=")
#获取页面标题
print(driver.title)
#获取url地址
print(driver.current_url)
sleep(2)
#关闭当前窗口
driver.close()
#关闭驱动对象
driver.quit()

注意:driver.close() ,当前关闭的是主窗口,只有完成页面切换才可以关闭当前新的页面

提示:

1、driver.titledrivet.current_url是属性没有括号。应用场景:一般判断上不操作是否执行成功。

2、driver.maximize_window() 一般为前置代码放到获取driver地址后,进行浏览器窗口的最大化

3、driver.refresh() 向浏览器重新发出请求,刷新页面,在cookie 会用到

4、driver.close() driver.quit() 的区别:

close():关闭当前主窗口
quit():关闭由driver对象启动的所有页面
如果只有一个窗口那么quit()close()没有区别。
?

三、获取元素信息操作

1、text 获取元素的文本; 如:driver.text
2、size 获取元素的大小: 如:driver.size
3、get_attribute 获取元素属性值;如:driver.get_attribute("id") ,传递的参数是元素的属性名
4、is_displayed 判断元素是否可见 如:element.is_displayed()
5、is_enabled 判断元素是否可用 如:element.is_enabled()
6、is_selected 判断元素是否被选中 如:element.is_selected()

#导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
#实例化驱动对象
driver=webdriver.Chrome()
#打开浏览器
driver.get('file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html')
#放大浏览器窗口
driver.maximize_window()
#获取用户输入框的大小
print(driver.find_element(By.CSS_SELECTOR,"#userA").size)
#获取页面上第一个超链接的文本内容
print(driver.find_element(By.LINK_TEXT,"新浪").text)
#获取页面上第一个超链接的地址
print(driver.find_element(By.LINK_TEXT,"新浪").get_attribute("href"))
#判断页面中的span标签是否可见
print("判断元素是否可见,默认应该是False:",driver.find_element(By.NAME,"sp1").is_displayed())
#判断页面中取消按钮是否可用
print("判断页面中取消按钮是否可用:",driver.find_element(By.CSS_SELECTOR,"input[value*='取消']").is_enabled())
#判断页面中'梨'对应的复选框是否为选中的状态
print("判断页面中梨是否为选中状态:",driver.find_element(By.CSS_SELECTOR,"input[value*='lia']").is_selected())
sleep(3)
#关闭驱动对象
driver.quit()

注意:里面的返回的结果都是True?和?False。?

四、鼠标操作 (需要实例化鼠标对象)

导包:from selenium.webdriver import ActionChains

实例化:action=ActionChains(driver)

1、context_click(element) # 右击
2、double_click(element) ?#双击
3、double_and_drop(source, target) ?# 拖拽
4、move_to_element(element) ?# 悬停?
5、perform() ?# 执行以上事件的方法?

4.1鼠标右键及双击操作:

#导包
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium import webdriver
from time import sleep
#实例化浏览器对象
driver=webdriver.Chrome()
#实例化鼠标对象
action=ActionChains(driver)
driver.get('file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html')
#调用右击事件方法
action.context_click(driver.find_element(By.CSS_SELECTOR,"#userA"))
#调用鼠标执行方法
action.perform()
#调用双击事件方法
action.double_click(driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin"))
action.perform()
sleep(2)
#关闭驱动对象
driver.quit()

4.2鼠标拖拽:

#导包
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium import webdriver
from time import sleep
#实例化浏览器对象
driver=webdriver.Chrome()
#实例化鼠标对象
action=ActionChains(driver)
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/drag.html")
#调用拖动事件
#要拖动的元素
div1=driver.find_element(By.CSS_SELECTOR,"#div1")
#目标位置
div2=driver.find_element(By.CSS_SELECTOR,"#div2")
#鼠标拖拽
action.drag_and_drop(div1,div2)
#调用鼠标执行方法
action.perform()
sleep(2)
#关闭驱动对象
driver.quit()

4.3鼠标悬停:

#导包
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium import webdriver
from time import sleep
#实例化驱动对象
driver=webdriver.Chrome()
#实例化鼠标对象
action=ActionChains(driver)
#浏览器最大化
driver.maximize_window()
#打开浏览器
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html?userA=&passwordA=&telA=&emailA=&selecta=bj&fruit=lia&hobby=%E6%97%85%E6%B8%B8&upfilea=")
#鼠标悬停操作
action.move_to_element(driver.find_element(By.CSS_SELECTOR,"button"))
#调用鼠标执行方法
action.perform()
sleep(2)
#关闭驱动对象
driver.quit()

五、键盘操作(不需要实例化对象)

导包:from selenium.webdriver.common.keys import Keys

1、send_keys(Keys.BACK_SPACE) 删除键(BackSpace)

2、send_keys(Keys.SPACE) 空格键(Space)

3、send_keys(Keys.TAB) 制表键(Tab)

4、send_keys(Keys.ESCAPE) 回退键(Esc)

5、send_keys(Keys.ENTER) 回车键(Enter)

6、send_keys(Keys.COMMAND,'a') 全选(command+A)

7、send_keys(Keys.COMMAND,'c') 复制(command+C)

8、send_keys(Keys.COMMAND, 'v') 粘贴(command+C)

#导包
from time import sleep
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
#实例化驱动对象
driver = webdriver.Chrome()
#最大化浏览器窗口
driver.maximize_window()
#隐式等待的时候设置为5s
driver.implicitly_wait(5)
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html?userA=&passwordA=&telA=&emailA=&selecta=bj&fruit=lia&hobby=%E6%97%85%E6%B8%B8&upfilea=")
# 1). 输入用户名:admin1,暂停2秒,删除1
element = driver.find_element(By.ID , 'userA')
element.send_keys("admin1")
sleep(2)
element.send_keys(Keys.BACK_SPACE) # 删除最后一个字符串 clear()清除全部
# 2). 全选用户名:admin,暂停2秒
element.send_keys(Keys.COMMAND, 'a')
sleep(2)
# 3). 复制用户名:admin,暂停2秒
element.send_keys(Keys.COMMAND, 'c')
sleep(2)
# 4). 粘贴到密码框
password=driver.find_element(By.ID,'passwordA')
sleep(2)
password.send_keys(Keys.COMMAND, 'V')
sleep(2)
# 5).tab一下换到下一个输入框
password.send_keys(Keys.TAB)
sleep(2)
moble=driver.find_element(By.CSS_SELECTOR,".telA")
sleep(2)
#打印空格键
moble.send_keys(Keys.SPACE)
sleep(2)
#模拟回车键
moble.send_keys(Keys.ENTER)
sleep(2)
# 退出浏览器驱动
driver.quit()

六、元素等待

(1)显示等待:

概念:首先要等待整个页面加载完成,再去进行元素定位,如果在定位过程中找到了元素,直接返回该元素,继续后面的操作,如果在指定的时间内没有找到该元素,那么每隔0.5秒再去找,如果超过了指定时间,就会抛出NoSuchElementException的异常错误

隐式等待只需要设置一次,对所有的元素定位的方法都是有效的。

实现方式:driver.implicitlty_wait(timeout)? ??表示的是最长的等待时间 单位为S

#导包
import time
from time import sleep
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver import ActionChains

#实例化驱动对象
driver=webdriver.Chrome()
#最大化浏览器窗口
driver.maximize_window()
corton=ActionChains(driver)
#设置隐式等待的时间为30s
driver.implicitly_wait(30)
#打开浏览器
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html?userA=&passwordA=&telA=&emailA=&selecta=bj&fruit=lia&hobby=%E6%97%85%E6%B8%B8&upfilea=")
print("开始时间:",time.strftime("%H:%M:%S"))
#针对第一个延时框输入admin1
driver.find_element(By.XPATH,"//div[@id='wait']/input[1]").send_keys("admin")
print("找到第一个开始时间:",time.strftime("%H:%M:%S"))
#针对第二个延时框输入admin2
driver.find_element(By.XPATH,"//div[@id='wait']/input[2]").send_keys("admin2")
print("找到第二个开始时间:",time.strftime("%H:%M:%S"))
sleep(2)
#关闭驱动对象
driver.quit()

(2)显示等待:

概念:定位指定元素时,如果能找到该元素,那么就直接返回该 元素,如果找不到,那么每隔指定的时间再去定位该 元素,如果超出最长等待时间,那么就抛出TimeOutException。

显示等待不需要等待整个页面的HTML的DOM树加载完成,显示等待只针对单个元素

实现方式:

导包:from selenium.webdriver.support.wait import WebDriverWait

WebDriverWait(driver, timeout,poll_frequency=0.5).until(lambda x:x.find_element(By.ID, "userA"))

driver:浏览器驱动对象

timeout:超时的时长:秒

poll_frequency:检测间隔时间,默认0.5s

后面跟上until方法,在until方法跟上匿名函数来实现元素定位。

#导包
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium import webdriver
from time import sleep
#实例化驱动
driver=webdriver.Chrome()
#最大化浏览器窗口
driver.maximize_window()
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html?userA=&passwordA=&telA=&emailA=&selecta=bj&fruit=lia&hobby=%E6%97%85%E6%B8%B8&upfilea=")
#设置显示等待时间
element=WebDriverWait(driver,5,poll_frequency=0.5).until(lambda x:x.find_element(By.XPATH,"//div[@id='wait']/input[1]"))
element.send_keys("admin")
sleep(2)
#设置显示等待时间
element=WebDriverWait(driver,5,poll_frequency=0.5).until(lambda x:x.find_element(By.XPATH,"//div[@id='wait']/input[2]"))
element.send_keys("admin2")
sleep(2)
#关闭驱动对象
driver.quit()

(3)强制等待:

强制等待就是让代码休眠,不做任何的操作

time.sleep(time)??time为秒

常用的场景:

1.当要获取元素的文本内容时,而元素的文本内容是需要通过后台接口请求并渲染的,此时,如果使用隐式等待或显示等待是没有办法获取到文本内容,所以需要使用强制等待

2.当要操作的元素已经存在,但是有其他的元素需要等待且与该操作的元素有业务关联,如果使用隐式等待或显示等待对该元素进行操作的话,是没有办法进行的,也需要使用强制等待。

#导包
from selenium.webdriver.common.by import By
from selenium import webdriver
from time import sleep
#实例化驱动
driver=webdriver.Chrome()
#最大化浏览器窗口
driver.maximize_window()
#设置隐式等待5秒
driver.implicitly_wait(5)
#打开浏览器
driver.get("http://tpshop-test.itheima.net/")
#登录
driver.find_element(By.CSS_SELECTOR,".red").click()
#强制等待2秒
sleep(2)
driver.find_element(By.CSS_SELECTOR,"#username").send_keys("13800000002")
sleep(2)
driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")
sleep(2)
driver.find_element(By.CSS_SELECTOR,"#verify_code").send_keys("8888")
sleep(2)
driver.find_element(By.CSS_SELECTOR,".J-login-submit").click()
sleep(5)
#获取购物车中的商品数量
print("购物车商品数量:",driver.find_element(By.CSS_SELECTOR,"#cart_quantity").text)
sleep(2)
#关闭浏览器驱动
driver.quit()

七、下拉框(需要实例化下拉框)

1、使用Select类

? 1)、导包:from selenium.webdriver.support.select import Select

? 2)、实例化下拉框:select=Select(driver.find_element(By.CSS_SELECTOR,"#selectA"))

? 3)、调用方法:select.select_by_index()索引从0开始

2、调用方法

? 1)、select.select_by_index(index)? ?#参数index表示的option索 引

? 2)、select.select_by_value(value)? #参数value表示的是option元属中value的属性值

? 3)、select.select_by_visible_text(visible_text )? #参数visible_text表示的是option的文本内容

#导包
from selenium.webdriver.common.by import By
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.select import Select
#实例化浏览器
driver=webdriver.Chrome()
#最大化窗口
driver.maximize_window()
#打开浏览器
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html?userA=&passwordA=&telA=&emailA=&selecta=bj&fruit=lia&hobby=%E6%97%85%E6%B8%B8&upfilea=")
#实例化下拉框对象
select=Select(driver.find_element(By.CSS_SELECTOR,"#selectA"))
#index 索引方法
select.select_by_index(3)
#强制等待
sleep(3)
#value 属性值选择目标元素
select.select_by_value("sh")
sleep(3)
#text 采用文本的方式选择目标信息
select.select_by_visible_text("广州")
sleep(3)
#关闭驱动对象
driver.quit()

八、弹出框

步骤:

1、需要切换到对话框 driver.switch_to.alert

2、处理对话框

? alert:alert.text 获取弹出框提示信息

? confirm:alert.accept() 确定弹出框

? prompt:alert.dismiss() 取消弹出框

#导包
from selenium.webdriver.common.by import By
from selenium import webdriver
from time import sleep
#实例化驱动对象
driver=webdriver.Chrome()
#最大化浏览器窗口
driver.maximize_window()
#打开浏览器
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html?userA=&passwordA=&telA=&emailA=&selecta=bj&fruit=lia&hobby=%E6%97%85%E6%B8%B8&upfilea=")
driver.find_element(By.CSS_SELECTOR,"#alerta").click()
sleep(2)
#获取弹出框对象
alert=driver.switch_to.alert
#打印弹出框内容
print(alert.text)
#取消弹出框
alert.dismiss()
sleep(2)
driver.find_element(By.CSS_SELECTOR,"#confirma").click()
sleep(2)
#打印弹出框内容
print(alert.text)
#确认弹出框
alert.accept()
sleep(2)
driver.find_element(By.CSS_SELECTOR,"#prompta").click()
sleep(2)
print(alert.text)
sleep(2)
alert.accept()
sleep(2)
driver.find_element(By.ID,'userA').send_keys("admin")
sleep(2)
#关闭浏览器驱动对象
driver.quit()

九、滚动条

实现步骤:

定义JS:js = "window.scrollTo(x, y)"? ?#x值为水平滚动条,y的值为垂直滚动条。

执行JS:driver.execute_script(js)

from selenium import webdriver
from time import sleep

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html?userA=&passwordA=&telA=&emailA=&selecta=bj&fruit=lia&hobby=%E6%97%85%E6%B8%B8&upfilea=")
sleep(2)
#定义js
js = "window.scrollTo(0, 2000)"
#实现js滑到2000的位置
driver.execute_script(js)
#滑到顶部
driver.execute_script('window.scrollTo(0,0)')
#滑到底部
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
#滑到1000的位置
driver.execute_script('window.scrollTo(0,1000)')   #滑到1000的位置
sleep(5)
driver.quit()

十、切换frame表单?

1、应用场景:

处于frame 中的元素,虽然可以获取元素信息,但是代码执行时无法定位元素,因此需要先切换到frame,再进行元素定位操作。

2、如何切换frame

方法:driver.switch_to.frame("id/name/element")?传入的是代表frame唯一的特征值

3.连续切换frame

说明:如果要连续切换frame必须要先回到默认页面,才能够实现下一个frame的切换

回到主页面的方法:driver.switch_to.default_content()

#导包
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
#实例化浏览器
driver = webdriver.Chrome()
#最大化浏览器窗口
driver.maximize_window()
#隐式等待
driver.implicitly_wait(10)
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html")

# 针对主页的用户名输入admin
driver.find_element(By.ID,"userA").send_keys("admin")
# 切换到注册A页面
driver.switch_to.frame(driver.find_element(By.ID,"idframe1"))
#针对注册用户a输入用户名adminA
driver.find_element(By.ID,"AuserA").send_keys("adminA")
# 回到默认首页面
driver.switch_to.default_content()
# 切换到注册B页面
driver.switch_to.frame(driver.find_element(By.ID, "idframe2"))
#针对注册用户B输入用户名adminB
driver.find_element(By.ID,"BuserA").send_keys("adminB")
sleep(3)
#关闭驱动对象
driver.quit()

十一、多窗口的切换 ☆

1.应用场景:? 页面是存在多窗口的,但是selenium默认焦点只会在主窗口上的所有元素,不切换窗口,就不能操作除主窗口以外的窗口内元素。

2.方法:

每个窗口都有唯一的一个句柄值,那么我们就可以通过句柄值来完成窗口的切换操作

? 1)、driver.current_window_handle (获取当前的句柄值)

? 2)、driver.window_handles ( 获取当前由driver启动所有窗口句柄)

? 3)、driver.switch_to.window(handle) —> 切换窗口

#导包
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
#实例化驱动对象
driver = webdriver.Chrome()
#最大化窗口
driver.maximize_window()
#隐式等待
driver.implicitly_wait(10)
#打开浏览器
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/page/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html")
driver.find_element(By.CSS_SELECTOR,"#ZCA").click()
sleep(2)
#获取当前窗口句柄信息
print(driver.current_window_handle)
#获取所有窗口句柄信息
windows=driver.window_handles
#切换窗口句柄
driver.switch_to.window(windows[-1])
# 在注册A页中输入用户名和密码
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("123456")
sleep(2)
#关闭驱动对象
driver.quit()

十二、截图操作

窗口截图就是指把出错的图片保存到指定位置

使用的方法:driver.get_screenshot_as_file(imgepath) #截图的文件名必须是以PNG结尾

参数:imagepath:为图片要保存的目录地址及文件名称,wenjian中的文件目录必须手动创建

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

driver=webdriver.Chrome()
driver.maximize_window()
driver.get("file:///Users/hanpeng/Documents/%E5%AD%A6%E4%B9%A0/09%E3%80%81UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%8F%8A%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/UI%E8%87%AA%E5%8A%A8%E5%8C%96/web%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7%E9%9B%86%E5%90%88/pagetest/%E6%B3%A8%E5%86%8CA.html?userA=&passwordA=&telA=&emailA=&selecta=bj&fruit=lia&hobby=%E6%97%85%E6%B8%B8&upfilea=")
try:
    driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
    driver.find_element(By.CSS_SELECTOR,"123passwordA").send_keys("123456")
except Exception as e:
    #截图方法,建议使用png格式 , ./为当前路径,  ../为上一级路径
    driver.get_screenshot_as_file("img/error.png")
    raise e
sleep(2)
driver.quit()

注意:指定图片存放的路径,需要自己手动创建文件夹

十三、验证码

验证码处理方式:

1、去掉验证码:由开发操作 , 用在测试环境

2、设置万能验证码:由开发 操作, 一般也只使用在测试环境

3、验证码识别技术:由于技术难度高,识别率很难达到100%,一般不建议使用

4、记录COOKIE:通过记录cookie来跳过登陆的操作

获取cookie:

(1)手动登录获取登录成功后的cookie,首先先打开需要操作的浏览器后点击检查清理cookie

(2)在浏览器界面输入账号密码后点击登录获取到它的名称和值?

?(3)最后把值和名以键值对的形式进行赋值

cookie={
    "name":"名称",
    "value":"值"
}

(4) 添加cookie

#添加cookie
driver.add_cookie(cookie)

例子:?

from time import sleep
from selenium import webdriver
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.baidu.com")
sleep(1)
#打印所有cookie信息
print("打印1:",driver.get_cookies())
sleep(1)
#获取单个cookie信息
print("打印2:",driver.get_cookie("BAIDUID"))
sleep(1)
#添加一个cookie信息
cookie_dict={
    "name":"xiaoyuer",
    "value":"123456"
}
driver.add_cookie(cookie_dict)
print("打印3:",driver.get_cookie("xiaoyuer"))
sleep(2)
driver.quit()
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
sleep(1)
#手动登陆获取登陆之后的cookie信息
cookie={
    "name":"BDUSS",
    "value":"JxWmtiZTNhYURTYjlUaUJHczRxd2t3Z1pEUnV-TmFsT2JZZVFGelR2TH5CdTFoRVFBQUFBJCQAAAAAAAAAAAEAAAAup4lO8J-Qn1N1cHB1c2luZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP95xWH~ecVhOG"
}
#添加cookie
driver.add_cookie(cookie)
#刷新页面
driver.refresh()
sleep(3)
driver.quit()

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 18:12:40  更:2022-04-18 18:14:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 14:18:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码