WebDriver API 详解
这里列了一些WebDriver API 的详细步骤,共3部分,初级,中级,高级供参考,也可以直接使用
文章目录
一、初级API详解
二、中级API详解
1.操作单选下拉列表-遍历所有选项并打印选项文本和选项值
代码如下(示例):
#encoding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome("D:\lupu_ui_autocation\driver\chromedriver.exe")
#被测试网页的HTML代码如下: 保存在d:\\select.html
'''
<html>
<body>
<select name = 'fruit' size =1>
<option id = 'peach' value = 'taozi'>桃子</option>
<option id = 'watermelon' value = 'xigua'>西瓜</option>
<option id = 'orange' value = 'juzi'>橘子</option>
<option id = 'kiwifruit' value = 'mihoutao'>猕猴桃</option>
<option id = 'maybush' value = 'shanzha'>山楂</option>
<option id = 'litchi' value = 'lizhi'>荔枝</option>
</select>
</body>
</html>
'''
#操作单选下拉列表
def test_print_select_text():
global driver
visit_uil = r"d:\\select.html"
driver.get(visit_uil)
select = driver.find_element_by_name('fruit') #通过name属性找到下拉列表元素
all_options = select.find_elements_by_tag_name('option') #获取所有标签名为option的元素,是个list
for option in all_options:
print('选项显示文本为:', option.text) #获取文本
print('选项值为:', option.get_attribute('value')) #获取value属性
option.click()
time.sleep(2)
driver.quit()
if __name__ == "__main__":
test_print_select_text()
2.通过三种方法选择下拉列表
代码如下(示例):
#选择下拉列表元素的三种方法
#encoding=utf-8
from selenium.webdriver.support.ui import Select
from selenium import webdriver
import time
driver = webdriver.Chrome("D:\lupu_ui_autocation\driver\chromedriver.exe")
def test_operate_drop_list():
global driver
visit_uil = r"d:\\select.html"
driver.get(visit_uil)
#使用XPATH定位方式获取select页面元素对象
select_element = Select(driver.find_element_by_xpath('//select'))
#打印默认选中项的文本
print(select_element.first_selected_option.text)
#获取所有选择项的页面元素对象,是个list
all_options = select_element.options
print(len(all_options)) #打印选项的总数
# is_enabled() 判断元素是否可操作 is_selected()判断元素是否被选中
if all_options[1].is_enabled() and not all_options[1].is_selected():
#方法一,通过序号选择元素,序号从0开始,select_by_index(1)选择第2个元素
select_element.select_by_index(1)
#select_element.all_selected_options[]获取所有被选中的对象组成的列表对象
print(select_element.all_selected_options[0].text)
assert select_element.all_selected_options[0].text =='西瓜', "断言西瓜失败"
time.sleep(2)
#方法二,通过选项的显示文本选择文本为‘猕猴桃’的选项
select_element.select_by_visible_text('猕猴桃')
assert select_element.all_selected_options[0].text =='猕猴桃','断言猕猴桃失败'
time.sleep(2)
#方法三,通过选项的value属性值选择value=‘shanzha’选项
select_element.select_by_value('shanzha')
print(select_element.all_selected_options[0].text)
assert select_element.all_selected_options[0].text =='山楂','断言山楂失败'
driver.quit()
if __name__ == "__main__":
test_operate_drop_list()
3.断言单选列表选项值
代码如下(示例):
#encoding=utf-8
from selenium.webdriver.support.ui import Select #导入Select模块
from selenium import webdriver
import operator
driver = webdriver.Chrome("D:\lupu_ui_autocation\driver\chromedriver.exe")
#断言单选列表选项值
def test_check_select_text():
global driver
visit_uil = r"d:\\select.html"
driver.get(visit_uil)
#使用XPATH定位方式获取select页面元素对象
select_element = Select(driver.find_element_by_xpath('//select'))
#获取所有选择项的页面元素对象,是个list
all_options = select_element.options
#声明一个list对象,存储下拉列表中所期望出现的文字内容
expect_options_list = ['桃子', '西瓜', '橘子', '猕猴桃', '山楂', '荔枝']
#使用map()函数获取页面中下拉列表展示的选项内容组成的列表对象,转换成列表
actual_options_list = list(map(lambda option: option.text, all_options))
#断言期望列表与实际列表是否完全一致
assert expect_options_list==actual_options_list,'断言相等失败'
driver.quit()
if __name__ == "__main__":
test_check_select_text()
4.操作多选的选择列表
代码如下(示例):
import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome("D:\lupu_ui_autocation\driver\chromedriver.exe")
#被测试网页的HTML代码如下: 保存在d:\\select001.html
'''
<html>
<body>
<select name = 'fruit' size =6 multiple = true>
<option id = 'peach' value = 'taozi'>桃子</option>
<option id = 'watermelon' value = 'xigua'>西瓜</option>
<option id = 'orange' value = 'juzi'>橘子</option>
<option id = 'kiwifruit' value = 'mihoutao'>猕猴桃</option>
<option id = 'maybush' value = 'shanzha'>山楂</option>
<option id = 'litchi' value = 'lizhi'>荔枝</option>
</select>
</body>
</html>
'''
#操作多选的选择列表
def test_multiple_option_list():
global driver
visit_uil = r"d:\\select001.html"
driver.get(visit_uil)
select_element = Select(driver.find_element_by_xpath('//select')) #通过定位找到下拉列表
select_element.select_by_value('lizhi') #通过value选择选项
select_element.select_by_visible_text('橘子') #通过文本选择选项
select_element.select_by_index(1) #通过下标选择选项
time.sleep(3)
for option in select_element.all_selected_options: #打印被选中的文本
print(option.text)
select_element.deselect_all() #取消所有被选中的项
time.sleep(3)
select_element.select_by_value('xigua') # 再次通过value选择选项
select_element.select_by_visible_text('猕猴桃') #再次 通过文本选择选项
select_element.select_by_index(4) # 再次通过下标选择选项
time.sleep(3)
select_element.deselect_by_visible_text('猕猴桃') #通过文本取消选项
select_element.deselect_by_index(4) #通过下标取消选项
select_element.deselect_by_value('xigua') #通过value 取消选项
driver.quit()
if __name__ == "__main__":
test_multiple_option_list()
5.操作可输入的下拉列表(同时模拟按键)
代码如下(示例):
#encoding=utf-8
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome("D:\lupu_ui_autocation\driver\chromedriver.exe")
#被测试网页的HTML代码如下: 保存在d:\\select.html
'''
<html>
<body>
<div style ='position:relative;'>
<input list = 'pasta' id = 'select'>
<datalist id = 'pasta'>
<option >Bavette</option>
<option >Rigatoni</option>
<option >Fiorentine</option>
<option >Gnocchi</option>
<option >Penne</option>
<option >Pcic</option>
<option >Cancl</option>
</datalist>
</div>
</body>
</html>
'''
#操作可输入的下拉列表(同时模拟按键<有些浏览器版本效果不能明显>)
def test_multiple_option_drop_list():
global driver
visit_uil = r"d:\\select.html"
driver.get(visit_uil)
driver.find_element_by_id('select').clear() #清空文本框
driver.find_element_by_id('select').send_keys('c', Keys.ARROW_DOWN) #输入c,同时按下箭头键
driver.find_element_by_id('select').send_keys(Keys.ARROW_DOWN)
driver.find_element_by_id('select').send_keys(Keys.ENTER) #按回车键
time.sleep(3)
driver.quit()
if __name__ == "__main__":
test_multiple_option_drop_list()
6.通过设置剪贴板实现复制和粘贴
代码如下(示例):
#encoding=utf-8
import win32clipboard as wc
import win32con
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time
from selenium import webdriver
driver = webdriver.Chrome("D:\lupu_ui_autocation\driver\chromedriver.exe")
# 获取剪切板内容
def getCopy():
wc.OpenClipboard()
t = wc.GetClipboardData(win32con.CF_UNICODETEXT)
wc.CloseClipboard()
return t
# 写入剪切板内容
def setCopy(str):
wc.OpenClipboard()
wc.EmptyClipboard()
wc.SetClipboardData(win32con.CF_UNICODETEXT, str)
wc.CloseClipboard()
#通过设置剪贴板实现复制和粘贴
def test_copyAndPaste():
global driver
visit_uil = "http://www.baidu.com"
driver.get(visit_uil)
content = '我是测试组'
setCopy(content) #把内容设置到剪贴板中
getCopy() #获取剪贴板中的内容
driver.find_element_by_id('kw').click() #将焦点切换到搜索框
'''
模拟Ctrl+V 组合键,将剪贴板中获取的内容粘贴到搜索框中
通过webdriver 内建的ActionChains 和Keys模块共同实现组合按键的操作
'''
ActionChains(driver).key_down(Keys.CONTROL).send_keys('V').key_up(Keys.CONTROL).perform()
driver.find_element_by_id('su').click() #单击搜索
time.sleep(3)
if __name__ == "__main__":
test_copyAndPaste()
driver.quit()
7.对浏览器当前页面进行截图
代码如下(示例):
screenshot_file_path()关键字封装
#encoding=utf-8
from util.open_browser import *
from util.dir_path import *
from util.date_time import *
def get_screenshot_picture(driver):
'''
调用get_screenshot_as_file(filename)方法,对浏览器当前页面进行截图
screenshot_file_path()详见[关键字封装][(https://blog.csdn.net/zhangguangyi520/article/details/114645446)]
'''
try:
file_path = screenshot_file_path()
pic_file_path = os.path.join(file_path, get_current_time())
driver.get_screenshot_as_file(pic_file_path + '.png')
except Exception as e:
raise e
if __name__=='__main__':
driver = OpenBrowser()
driver.get('https://www.baidu.com')
get_screenshot_picture(driver)
总结
未完