WebDriver常用API

   日期:2020-09-20     浏览:99    评论:0    
核心提示: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_xpathXpath:是一个页面元素在页面中表现最基本的路径相对路径://*[

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) 要结合企业的实际情况,系统的实际运行环境、测试环境、开发环境,都有可能是不一样的。

			后续持续给你更新,看完记得关注我哦!!!
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服