Selenium 3 常用API
2021-03-01 18:26
标签:好的 类型 jpg int 释放 ubi ice exclude dong 操作输入框/单击 双击 下拉框操作 键盘操作 鼠标操作 单选框操作 多选框操作 拖动窗口 操作 JS 框 切换 frame 使用 JS 操作页面对象 操作滚动条 浮动(联想)选项选择 更改页面对象的属性值 文件下载 文件上传 操作日期控件 操作富文本框 高亮显示操作元素 切换浏览器标签页 操作表格 测试 HTML5 的视频播放器 参数 parm 可以是: 元素定位
获取页面元素属性
元素判断
元素操作
断言
截屏
隐式等待
显式等待
操作 cookies
页面加载超时
结束 Windows 的浏览器进程
浏览器相关配置
元素定位
1 ‘‘‘ 使用id定位 ‘‘‘
2 driver.find_element_by_id("id值")
3 driver.find_element("id", "id值") # 该方式可分离定位方式,更适合封装
4
5
6 ‘‘‘ 使用xpath定位 ‘‘‘
7 # 定位单个元素
8 driver.find_element_by_xpath("xpath定位表达式")
9 driver.find_element("xpath", "xpath定位表达式")
10 # 定位多个元素,返回列表
11 driver.find_elements_by_xpath("xpath定位表达式")
12 driver.find_elements("xpath", "xpath定位表达式")
13
14
15 ‘‘‘ 使用name定位 ‘‘‘
16 # 定位单个元素
17 driver.find_element_by_name("name值")
18 driver.find_element("name", "name值")
19 # 定位多个元素
20 driver.find_elements_by_name("name值")
21 driver.find_elements("name", "name值")
22
23
24 ‘‘‘ 使用classname定位 ‘‘‘
25 # 定位单个元素
26 driver.find_element_by_class_name("class属性值")
27 driver.find_element("classname", "class属性值")
28 # 定位多个元素
29 driver.find_elements_by_class_name("class属性值")
30 driver.find_elements("classname", "class属性值")
31
32
33 ‘‘‘ 使用标签名称定位 ‘‘‘
34 # 定位单个元素
35 driver.find_element_by_tag_name("标签名称")
36 driver.find_element("tagname", "标签名称")
37 # 定位多个元素
38 driver.find_elements_by_tag_name("标签名称")
39 driver.find_elements("tagname", "标签名称")
40
41
42 ‘‘‘ 使用链接的全部文字定位 ‘‘‘
43 # 定位单个元素
44 driver.find_element_by_link_text("链接全部本文内容")
45 driver.find_element("linktext", "链接全部本文内容")
46 # 定位多个元素
47 driver.find_elements_by_link_text("链接全部本文内容")
48 driver.find_elements("linktext", "链接全部本文内容")
49
50
51 ‘‘‘ 使用部分链接文字定位 ‘‘‘
52 # 定位单个元素
53 driver.find_element_by_partial_link_text("链接的部分本文内容")
54 driver.find_element("partial link text", "链接的部分本文内容")
55 # 定位多个元素
56 driver.find_elements_by_partial_link_text("链接的部分本文内容")
57 driver.find_elements("partial link text", "链接的部分本文内容")
58
59
60 ‘‘‘ 使用CSS方式定位 ‘‘‘
61 # 定位单个元素
62 driver.find_element_by_css_selector("CSS定位表达式")
63 driver.find_element("css selector", "CSS定位表达式")
64 # 定位多个元素
65 driver.find_elements_by_css_selector("CSS定位表达式")
66 driver.find_elements("css selector", "CSS定位表达式")
获取页面元素的属性信息
1 from selenium import webdriver
2 import time
3
4
5 driver = webdriver.Chrome()
6 driver.get("https://baidu.com")
7
8 searchBox = driver.find_element_by_id(‘kw‘)
9 element = driver.find_element_by_xpath("//a[text()=‘使用百度前必读‘]")
10
11 # 元素的标签名
12 print(element.tag_name)
13 # 元素的大小
14 print(element.size)
15 # 元素的本文内容
16 print(element.text)
17 # 获取元素指定属性的值,等价于get_property())
18 print(element.get_attribute("name")) # 如"name"、"value"等属性
19
20 element = driver.find_element_by_id("kw")
21 element.send_keys("hippop")
22 print(element.get_attribute("value")) # 获取输入框的值
23
24
25 # 获取页面元素的CSS属性值
26 searchBox = driver.find_element_by_id(‘kw‘)
27 print(searchBox.value_of_css_property("height"))
28 print(searchBox.value_of_css_property("width"))
29
30 button = driver.find_element_by_id(‘su‘)
31 print(button.value_of_css_property("font-size"))
32 print(button.value_of_css_property("font-family"))
33
34
35 time.sleep(3)
36 # driver.close() # 关闭浏览器的当前tab窗口
37 driver.quit() # 关闭浏览器
元素判断
判断元素是否存在
1 from selenium import webdriver
2 from selenium.webdriver import ActionChains
3 import time
4
5
6 driver = webdriver.Chrome()
7 driver.get("http://www.baidu.com")
8
9
10 # 函数封装:判断元素是否存在
11 def isElementPresent(driver, by, value):
12 try:
13 element = driver.find_element(by=by, value=value)
14 except NoSuchElementException as e:
15 # 打印异常信息
16 print(e)
17 # 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False
18 return False
19 else:
20 # 没有发生异常,表示在页面中找到了该元素,返回True
21 return True
22
23 if isElementPresent(driver, "id", "kw"):
24 driver.find_element_by_id("kw").send_keys("hiphop")
25
26
27 time.sleep(3)
28 driver.quit()
element.is_displayed():判断元素是否可显示(未被隐藏)
1 from selenium import webdriver
2 import time
3
4
5 driver = webdriver.Chrome()
6 driver.get("http://39.100.104.214/test_visible.html")
7
8 element = driver.find_element_by_id("div1")
9 print(element.is_displayed()) # True
10 element = driver.find_element_by_id("div2")
11 print(element.is_displayed()) # False
12
13 time.sleep(3) # 休眠3秒后点击按钮,让元素隐藏
14 button = driver.find_element_by_id("button1")
15 button.click()
16
17 element = driver.find_element_by_id("div1")
18 print(element.is_displayed()) # False
19 element = driver.find_element_by_id("div2")
20 print(element.is_displayed()) # True
21
22
23 time.sleep(2)
24 driver.quit()
element.is_enabled():判断元素是否可用
1 from selenium import webdriver
2 import time
3
4
5 driver = webdriver.Chrome()
6 driver.get("http://39.100.104.214/test_enable.html")
7
8 button = driver.find_element_by_id("input1") # 可操作
9 print(button.is_enabled()) # True
10
11 button = driver.find_element_by_id("input2") # 不可用(标签中加了"disabled"属性)
12 print(button.is_enabled()) # False
13
14 button = driver.find_element_by_id("input3") # 只读(标签中加了"readonly"属性)
15 print(button.is_enabled()) # True
16
17
18 time.sleep(2)
19 driver.quit()
element_located_selection_state_to_be():判断一个元素的状态是否是给定的选择状态
方式1:element_selection_state_to_be(driverObject, state)
1 from selenium.webdriver.common.by import By
2 from selenium.webdriver.support.ui import WebDriverWait
3 from selenium.webdriver.support import expected_conditions as EC
4
5 # 设置显式等待时间为10秒
6 wait = WebDriverWait(driver, 10)
7
8 # 判断给定的元素是否被选中
9 # EC.element_selection_state_to_be(driverObject, state)
10
11 # 设定元素当前选中状态为True
12 EC.element_selection_state_to_be(driver.find_element_by_id("peach"), True).is_selected # 此句会先校验元素是否存在,不存在则抛异常
13
14 # 显式等待元素是否为选中状态,若是选中状态则返回True,若超过10秒仍不为选中状态,则跑出异常(异常提示信息为:超时10秒)
15 wait.until(EC.element_selection_state_to_be(driver.find_element_by_id("peach"), True))
16 # 显式等待元素是否不为选中状态,若不为选中状态则返回False
17 wait.until_not(EC.element_selection_state_to_be(driver.find_element_by_id("peach"), True))
方式2:element_selection_state_to_be(locator, state)
1 # 原型
2 EC.element_located_selection_state_to_be((By.ID, "peach"), True).is_selected # 不会校验元素是否存在,返回True
3 # True
4 wait.until(EC.element_located_selection_state_to_be((By.ID, "peach"), True))
5 # Flase
6 wait.until_not(EC.element_located_selection_state_to_be((By.ID, "waterlemon"), True))
其他
element_to_be_clickable(locator):判断某元素是否可见且能被单击,满足则返回元素对象,否则返回False
1 # 存在并可见
2 wait.until(EC.element_to_be_clickable((By.ID, "")))
3 # 不存在
4 wait.until_not(EC.element_to_be_clickable((By.ID, "")))
frame_to_be_available_and_switch_to_it(parm):判断frame是否可用,如果可用返回True并切入到该frame
invisibility_of_element_located(locator):希望某元素不出现在页面的DOM中
visibility_of_element_located(locator):希望某元素出现在页面的DOM中
1 element = wait.until(EC.visibility_of_element_located((By.ID, ""), True))
2
3 element = EC.visibility_of(driver.find_element_by_id(""))
4
5 # 判断页面上至少一个元素可见,返回满足条件的所有页面对象。
6 inputs = wait.until(EC.visibility_of_any_elements_located((By.TAG_NAME, "input")))
presence_of_all_elements_located(locator):判断页面上至少一个元素出现(不一定可见),返回满足条件的所有页面对象
1 elements = wait.until(EC.presence_of_all_elements_located((By.TAG_NAME, "input")))
2 # 判断单个元素出现(不一定可见)
3 element = wait.until(EC.presence_of_element_located((By.TAG_NAME, "input")))
staleness_of(driver.find_element_by_id(""):判断元素是否仍在DOM中,如果在规定时间内已经移除,返回True,反之False
text_to_be_present_in_element((By.ID, ""):判断文本内容text是否出现在某个元素中,判断的是元素的text
text_to_be_present_in_element_value(locator, text):判断文本内容text是否出现在某个元素的value属性值中
元素操作
操作输入框
输入内容:element.send_keys()
清空内容:element.clear()
单击:element.click()
1 from selenium import webdriver
2 import time
3
4 driver = webdriver.Chrome()
5 driver.get("https://baidu.com")
6 time.sleep(2)
7
8 searchBox = driver.find_element_by_id(‘kw‘)
9 searchBox.send_keys("before")
10
11 time.sleep(2)
12
13 # 为了防止缓存的文字内容干扰测试结果,把输入框的内容先清空
14 searchBox.clear()
15 searchBox.send_keys("after")
16
17 # 定位"百度一下"按钮
18 button = driver.find_element_by_id("su")
19 # 单击按钮
20 button.click()
21
22 time.sleep(2)
23 driver.quit()
双击:action_chains.double_click(element).perform()
1 from selenium import webdriver
2 from selenium.webdriver import ActionChains
3 import time
4
5
6 driver = webdriver.Chrome()
7 driver.get("http://39.100.104.214/test_doubleclick.html")
8 time.sleep(2)
9
10 element = driver.find_element_by_id("inputBox")
11
12 action_chains = ActionChains(driver)
13 # 双击元素
14 action_chains.double_click(element).perform()
15
16 time.sleep(2)
17 driver.quit()
下拉框操作
单选
1 from selenium import webdriver
2 from selenium.webdriver.support.ui import Select
3 import time
4
5
6 driver = webdriver.Chrome()
7 driver.get("http://39.100.104.214/test_select.html")
8
9
10 # 获取下拉框对象
11 select_element = Select(driver.find_element_by_xpath("//select"))
12 print(select_element)
13
14 # 打印默认选中的选项的文本
15 print(select_element.first_selected_option.text)
16
17 # 获取所有的选项对象
18 all_options = select_element.options
19 print(all_options)
20
21 # 判断若第二个选项对象可用,并且没有被选中,就选中它
22 if all_options[1].is_enabled() and not all_options[1].is_selected():
23 # 方式1:通过索引来选择选项
24 select_element.select_by_index(1)
25 print (select_element.all_selected_options[0].text)
26 assert "西瓜" in select_element.all_selected_options[0].text
27
28 time.sleep(1)
29 # 方式2:通过文本来选择选项
30 select_element.select_by_visible_text("猕猴桃")
31 assert "猕猴桃" in select_element.all_selected_options[0].text
32
33 time.sleep(1)
34 # 方式3:通过value属性值来选择选项
35 select_element.select_by_value("shanzha")
36 assert "山楂" in select_element.all_selected_options[0].text
37
38 time.sleep(2)
39 driver.quit()
封装下拉框操作
1 from selenium import webdriver
2 from selenium.webdriver.support.ui import Select
3 import time
4
5
6 # 根据xpath定位到下拉框对象,再根据选项的文本值选中指定选项
7 def choose_option(driver, select_xpath, option_text):
8 select = driver.find_element_by_xpath(select_xpath)
9 all_options = select.find_elements_by_tag_name("option")
10 # 遍历所有选项对象
11 for option in all_options:
12 # print ("选项显示的文本:", option.text)
13 # print ("选项值为:", option.get_attribute("value"))
14 # 如果选项的文本值为入参,则选中
15 if option.text == option_text:
16 option.click()
17 return
18
19
20 driver = webdriver.Chrome()
21 driver.get("http://39.100.104.214/test_select.html")
22
23 # 找到页面上name属性为“fruit”的下拉框对象,并选中"猕猴桃"选项
24 choose_option(driver, "//select[@name=‘fruit‘]", "猕猴桃")
25
26 time.sleep(2)
27 driver.quit()
校验下拉框中的全部选项内容
1 from selenium import webdriver
2 from selenium.webdriver.support.ui import Select
3 import time
4
5
6 driver = webdriver.Chrome()
7 driver.get("http://39.100.104.214/test_select.html")
8
9 # 定位下拉框对象
10 select_element = Select(driver.find_element_by_xpath("//select"))
11 # 获取所有选项对象
12 actual_options = select_element.options
13 # 以列表形式获取所有选项的文本值
14 actual_options_text = [option.text for option in actual_options]
15 print(actual_options_text)
16
17 expected_values = [‘桃子‘, ‘西瓜‘, ‘橘子‘, ‘猕猴桃‘, ‘山楂‘, ‘荔枝‘]
18 # 断言下拉框的选项内容是否全部相等
19 assert actual_options_text == expected_values
20
21
22 time.sleep(2)
23 driver.quit()
多选
1 from selenium import webdriver
2 from selenium.webdriver.support.ui import Select
3 import time
4
5
6 driver = webdriver.Chrome()
7 driver.get("http://39.100.104.214/test_multiple_select.html")
8
9 select_element = Select(driver.find_element_by_xpath("//select"))
10 actual_options = select_element.options
11
12 # 和单选的下拉框一样,遍历所有的选项文字和value
13 for option in actual_options:
14 print(option.text)
15 print(option.get_attribute("value"))
16 if option.text == "桃子": # 基于选项文本选择
17 option.click()
18 if option.get_attribute("value") == "lizhi": # 基于value选择
19 option.click()
20
21 # 打印所有被选中option的值
22 print("First choices:")
23 for option in select_element.all_selected_options:
24 print (option.text)
25
26 time.sleep(2)
27 select_element.select_by_index(1) # 基于坐标选择
28 select_element.select_by_visible_text("荔枝") # 基于选项文本选择
29 select_element.select_by_value("juzi") # 基于value选择
30 select_element.deselect_all() # 取消所有的选项
31
32 # 打印所有被选中option的值
33 print("Second choices:")
34 for option in select_element.all_selected_options: # 空
35 print (option.text)
36
37 time.sleep(2)
38 select_element.select_by_index(1)
39 select_element.select_by_visible_text("荔枝")
40 select_element.select_by_value("juzi")
41
42 time.sleep(2)
43 select_element.deselect_by_visible_text("荔枝") # 基于选项文本取消选择
44 select_element.deselect_by_index(1) # 基于坐标取消选择
45 select_element.deselect_by_value("juzi") # 基于value取消选择
46
47 # 打印所有被选中option的值
48 print("Third choices:")
49 for option in select_element.all_selected_options: # 空
50 print (option.text)
51
52
53 time.sleep(2)
54 driver.quit()
键盘操作
selenium 键盘操作
1 from selenium import webdriver
2 from selenium.webdriver.common.keys import Keys
3 import time
4
5
6 driver = webdriver.Chrome()
7 driver.get("http://www.baidu.com")
8
9 driver.find_element_by_id("kw").clear() # 清空输入框
10
11 driver.find_element_by_id("kw").send_keys("hiphop") # 输入框内写入文本
12 driver.find_element_by_id("kw").send_keys(Keys.ENTER) # 模拟键盘回车操作
13
14
15 time.sleep(5)
16 driver.quit()
系统键盘事件封装
1 from selenium import webdriver
2 from selenium.webdriver import ActionChains
3 from selenium.webdriver.common.keys import Keys
4 import win32clipboard as w
5 import win32con
6 import time
7 import win32api
8
9
10 # 读取剪切板
11 def getText():
12 w.OpenClipboard()
13 d = w.GetClipboardData(win32con.CF_TEXT)
14 w.CloseClipboard()
15 return d
16
17
18 # 设置剪切板内容
19 def setText(aString):
20 w.OpenClipboard()
21 w.EmptyClipboard()
22 w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
23 w.CloseClipboard()
24
25
26 VK_CODE ={
27 ‘enter‘:0x0D,
28 ‘ctrl‘:0x11,
29 ‘a‘:0x41,
30 ‘v‘:0x56,
31 ‘x‘:0x58
32 }
33
34
35 # 键盘键按下
36 def keyDown(keyName):
37 win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)
38
39
40 # 键盘键抬起
41 def keyUp(keyName):
42 win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0)
43
44
45 driver = webdriver.Chrome()
46 url = "https://www.baidu.com"
47 driver.get(url)
48 content = ‘软件测试‘
49
50 setText(content) # 设置剪切板中文字内容为:‘软件测试‘
51 getContent = getText() # 获取剪切板中的内容
52 print ("剪切板中的内容:", getContent.decode("gbk"))
53 driver.find_element_by_id("kw").click() # 点击输入框,使焦点保持在输入框中
54
55 time.sleep(1)
56 keyDown(‘ctrl‘)
57 keyDown(‘v‘)
58 # 释放 ctrl + v 组合键软件测试
59 keyUp(‘v‘)
60 keyUp(‘ctrl‘)
61
62 driver.find_element_by_id(‘su‘).click() # 点击搜索按钮
63
64 time.sleep(3)
65 driver.quit()
66
67 #所有的键盘按钮定义
68 ‘‘‘
69 VK_CODE = {
70 ‘backspace‘: 0x08,
71 ‘tab‘: 0x09,
72 ‘clear‘: 0x0C,
73 ‘enter‘: 0x0D,
74 ‘shift‘: 0x10,
75 ‘ctrl‘: 0x11,
76 ‘alt‘: 0x12,
77 ‘pause‘: 0x13,
78 ‘caps_lock‘: 0x14,
79 ‘esc‘: 0x1B,
80 ‘spacebar‘: 0x20,
81 ‘page_up‘: 0x21,
82 ‘page_down‘: 0x22,
83 ‘end‘: 0x23,
84 ‘home‘: 0x24,
85 ‘left_arrow‘: 0x25,
86 ‘up_arrow‘: 0x26,
87 ‘right_arrow‘: 0x27,
88 ‘down_arrow‘: 0x28,
89 ‘select‘: 0x29,
90 ‘print‘: 0x2A,
91 ‘execute‘: 0x2B,
92 ‘print_screen‘: 0x2C,
93 ‘ins‘: 0x2D,
94 ‘del‘: 0x2E,
95 ‘help‘: 0x2F,
96 ‘0‘: 0x30,
97 ‘1‘: 0x31,
98 ‘2‘: 0x32,
99 ‘3‘: 0x33,
100 ‘4‘: 0x34,
101 ‘5‘: 0x35,
102 ‘6‘: 0x36,
103 ‘7‘: 0x37,
104 ‘8‘: 0x38,
105 ‘9‘: 0x39,
106 ‘a‘: 0x41,
107 ‘b‘: 0x42,
108 ‘c‘: 0x43,
109 ‘d‘: 0x44,
110 ‘e‘: 0x45,
111 ‘f‘: 0x46,
112 ‘g‘: 0x47,
113 ‘h‘: 0x48,
114 ‘i‘: 0x49,
115 ‘j‘: 0x4A,
116 ‘k‘: 0x4B,
117 ‘l‘: 0x4C,
118 ‘m‘: 0x4D,
119 ‘n‘: 0x4E,
120 ‘o‘: 0x4F,
121 ‘p‘: 0x50,
122 ‘q‘: 0x51,
123 ‘r‘: 0x52,
124
上一篇:第一个Windows实例程序