1、 元素定位的方式:
id name tag class link_text partial_link_text xpath css
定位元素的时候,有一个要求:所有的定位属性,必须是网页中唯一的一个属性。
2、 Webdriver中定位元素的基本语法:
最常用:find_element_by_id、name、class_name、link_text
最精确能定位元素:find _element_by_xpath
Xpath:是一个页面元素在页面中表现最基本的路径
相对路径://*[@id=“kw”]
绝对路径:/html/body/div/div[2]/div[5]/div[1]/div/form/span[1]/input
3、 对页面元素可以进行的操作:
clear():清除文本框中已有的内容。无需参数。
send_keys():向文本框中输入数值。需要参数的函数,参数类型为字符串。
click():点击操作。按钮、超链接、图片等元素。无需参数
案例:打开火狐浏览器,打开百度首页,在百度搜索框中输入 千锋教育,并点击百度按钮。
4、获取页面元素属性(text get_attribute)
size :返回元素的尺寸(宽,高)
text :获取元素的文本内容
get_attribute(name):获取属性值,需要参数,参数为元素的属性值,一般情况下该内容不
单独对单一的元素使用,一般用于批量获取元素属性
is_displayed():设置该元素是否用户可见
5、鼠标事件:(move_to_element() perform()实现 ActionChains包)
Action Chains 类提供了鼠标操作的常用方法:
perform():执行所有ActionChains 中存储的行为
context_click():右击
double_click():双击
drag_and_drop():拖动
move_to_element():鼠标悬停
悬停代码:
# 将百度搜索设置后续操作
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
driver= webdriver.Firefox()
driver.get("https://www.baidu.com")
sleep(3)
# 定位到悬停元素
ab=driver.find_element_by_id("s-usersetting-top")
# 鼠标点击到该元素
ActionChains(driver).move_to_element(ab).perform()
# 点击元素链接
driver.find_element_by_link_text("搜索设置").click()
sleep(3)
# 点击单选按钮
driver.find_element_by_id("s1_2").click()
sleep(2)
driver.find_element_by_id("SL_1").click()
sleep(2)
driver.find_element_by_id("nr_2").click()
sleep(2)
driver.find_element_by_id("issw1_2").click()
sleep(2)
driver.find_element_by_id("sh_2").click()
sleep(2)
# 点击元素链接保存
driver.find_element_by_link_text("保存设置").click()
# 回到原网页
driver.switch_to.alert.accept()
url地址是否相同:
""" 常用的页面信息和内容的验证 验证网页的title 验证网页的URL地址 验证网页中特定元素的文本信息 验证网页是否包含特定的信息(数据) """
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
url = "https://www.baidu.com/"
title = "百度一下,你就知道"
driver.get(url)
sleep(2)
# driver.title 当前页面的title
if title ==driver.title:
print("Yes")
else:
print("No")
# driver.current_url 当前页面的URL
print(driver.current_url)
if url == driver.current_url:
print("Yes")
else:
print("No")
# 网页中是否包含:百度一下,你就知道 字符串
if title in driver.page_source:
print("Yes")
else:
print("No")
# 输出浏览器当前的源代码
print(driver.page_source)
6、对警告框的处理:
1、 警告框的形式:
1) alert
2) confirm
3) prompt
由于警告框并不是HTML元素,所以,需要使用switch_to.alert进行切转和转变。
2、swicth_to.alert. ()的处理:
1) text:获取警告框中的提示信息。
2) accept:接受警告框。
3) dismiss:消除、撤销警告框
4) send_keys:专用于prompt类型的警告框。(类似的组合按键、功能键都不能用)
警告框代码:
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("file:///C:/Users/Administrator/Desktop/test_confirm.html")
# 定位元素并操作
driver.find_element_by_tag_name("input").click()
# 切换到警告框
sleep(4)driver.switch_to.alert.accept()
""" 定位元素 对警告框输入内容 接受警告框 在确认后的页面判断2中输入的内容是否存在 """
from selenium import webdriver
from time import sleep
driver= webdriver.Firefox()
driver.get("file:///C:/Users/Administrator/Desktop/test_prompt.html")
# 定位元素并操作
driver.find_element_by_id("test").click()
# 切换到警告框 ,输入文字并接受
input1="写代码"
driver.switch_to.alert.send_keys(input1)
sleep(4)
driver.switch_to.alert.accept()
# 判断输入的的内容是否正确
if input1 in driver.page_source:
print("yes")
else:
print("no")
注意:
1) 不论是哪一种类型的警告框,都是用switch_to.alert进行切换;
2) 警告框并不是HTML元素,所以里面的文本框和按钮,都不能用常用的元素的操作方式。
3) 警告框并不是HTML元素,所以里面的文本框和按钮,都不能用Selenium的元素定位去识别。
2、 frame或者iframe的处理
7、iframe、Frame能够内嵌网页
swicth_to.frame 切换到框架
swicth_to.default_content 切换到默认连接
由于iframe或者Frame能够内嵌网页,内嵌的网页和原网页不是同一个页面实体。因此不能直接进行页面元素之间的识别和定位。
需要使用switch_to.frame进行切换和转换,转入需要定位元素的网页和框架内。
如果页面中也有iframe,但是无需操作,那么不需要进行转换和切换。
进入到iframe或者frame中,还得出来(需要操作另外的网页实体中的元素的时候):
Driver.switch_to.default_content
框架代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style type="text/css"> </style>
</head>
<body>
<iframe src="http://www.baidu.com" id="if" width="800" height="500" ></iframe>
<hr />
<a href="http://www.QQ.com">QQ</a>
</body>
</html>
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("file:///C:/Users/Administrator/Desktop/index.html")
sleep(2)
# 进行框架切换,然后进行元素定位
driver.switch_to.frame("if")
# 在网页中,定位百度搜索框按钮
driver.find_element_by_id("kw").send_keys("python")
driver.find_element_by_id("su").click()
sleep(2)
# 从框架中切换出来,回到原网页
driver.switch_to.default_content()
driver.find_element_by_link_text("QQ").click()
8、对下拉列表元素的操作
导包 :
from selenium.webdriver.support.select import Select
使用Select()方法将元素变成下拉列表后进行操作(只能是 Select标签)
对元素的选择有三种方式:
按照索引(index)、value属性的值、 文本进行元素的选择。
语法: select_by_index()
select_by_visible_text()
select_by_index()
select代码如下:
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.select import Select
driver=webdriver.Firefox()
driver.get("file:///C:/Users/Administrator/Desktop/new_file2.html")
sleep(2)
# 定位select元素
sele=driver.find_element_by_id("sss")
sleep(2)
# 将sl转化
Select(sele).select_by_index(1)
sleep(2)
Select(sele).select_by_value("js")
sleep(2)
Select(sele).select_by_visible_text("Android")
9、屏幕截图和浏览器关闭
1) 屏幕截图。
一般就是用来证明软件运行中有bug的时候进行的界面截图。使用函数:
Get_screenshot_as_file()进行。该函数需要一个参数,参数为图片的存储路径;支持的图片格式为 PNG格式。
2) 浏览器的关闭和退出。
close():关闭单一的浏览器标签页。如果有多个页面标签,关闭指定标签页,用close,如果只有一个标签页 ,关闭和退出没有区别
quit():退出浏览器程序
3)针对元素截图:screenshot()
logo=driver.find_element_by_id("")
logo.screenshot(“logo.png”)
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("https://www.baidu.com")
sleep(2)
# 给百度首页进行截图
driver.get_screenshot_as_file("1.png")
# 定位元素
driver.find_element_by_id("kw").send_keys("java")
sleep(2)
driver.find_element_by_id("su").click()
sleep(2)
# 给百度的搜索结果页面进行截图
driver.get_screenshot_as_file("D:\\2.png")
driver.close()
10、参数化脚本:
1、脚本参数化定义:
使用变量代替脚本中的常量,是自动化测试中最重要的技术点之一
2、使用脚本中特有的数据类型(list或者元祖)实施自动化
3、使用外部数据文件(TXT,CSV)
打开和读取文件、数据
将数据组合进入脚本中使用(一定要使用对应数据)
文件使用完之后,记得关闭
参数化代码:
import csv
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("https://ssl.zc.qq.com/v3/index-chs.html")
sleep(2)
csv_f1 = open("qq_register.csv","r",encoding='utf-8')
data = csv.reader(csv_f1)
for i in data:
driver.refresh()
driver.find_element_by_id("nickname").send_keys(i[0])
sleep(2)
driver.find_element_by_id("password").send_keys(i[1])
sleep(2)
driver.find_element_by_id("phone").send_keys(i[2])
sleep(2)
driver.find_element_by_id("code").send_keys(i[3])
csv_f1.close()
11、在页面中使用JS脚本操作页面元素
1、通用的函数:
execute_script 会优先执行JS脚本,结束后运行Python脚本
2、JS语句用于修改元素的css样式,前提是要定义一个css样式
3、用JS语句获取焦点元素
driver.execute_script(“arguments[0].focus();”,ys)
4、JS语句用于控制滚动条
js = “document.documentElement.scrollTop=100000000000”
5、JS语句用于修改元素属性
“document.getElementById(‘train_date’).removeAttribute(‘readonly’);”
6、JS语句用于设置元素的value值属性
“document.getElementById(‘train_date’).value=‘2020-10-02’;”
12、浏览器窗口句柄:
获取当前窗口句柄:driver.current_window_handle
获取浏览器所有句柄:driver.window_handles
切换到指定的浏览器窗口:driver.switch_to.window(handle)
from selenium import webdriver
from time import sleep
driver= webdriver.Firefox()
driver.get("https://www.baidu.com")
sleep(3)
driver.get_screenshot_as_file("bd.png")
# 输出当前窗口的句柄
print(driver.current_window_handle)
driver.find_element_by_link_text("新闻").click()
sleep(3)
# 切换浏览器句柄
driver.switch_to.window(driver.window_handles[1])
# 输出当前窗口的句柄
print(driver.current_window_handle)
driver.get_screenshot_as_file("news.png")
sleep(2)
# 获取浏览器当前所有的窗口句柄
print(driver.window_handles)
driver.quit()
扩展的知识:
1) 实际运行的软件系统中,某些元素不好识别的,在测试环境中是不存在的。
2) 如果测试系统中,有手机验证码或者图形验证码的时候,测试或者开发人员会专门设置一个万能验证码(无需真的获取就能验证通过)
3) 可以暂时的屏蔽或者注释掉验证码功能。
4) 要结合企业的实际情况,系统的实际运行环境、测试环境、开发环境,都有可能是不一样的。
后续持续给你更新,看完记得关注我哦!!!