昨天笔者分享了selenium' webdriver api的用法,今天呢笔者接着上一篇文章继续分享,废话就不多说了,直接开始吧。
一、判断页面元素是否可见
用于测试的HTML代码
HTML中显示与隐藏元素
function showAndHidden1() {
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
if(div1.style.display=='block') div1.style.display='none';
else div1.style.display='block';
if(div2.style.display=='block') div2.style.display='none';
else div2.style.display='block';
}
function showAndHidden2() {
var div3 = document.getElementById("div3");
var div4 = document.getElementById("div4");
if(div3.style.visibility=='visible') div3.style.visibility='hidden';
else div3.style.visibility='visible';
if(div4.style.visibility=='visible') div4.style.visibility='hidden';
else div4.style.visibility='visible';
}
display:元素不占用页面位置
DIV 1
DIV 2
visibility:元素占用页面位置
DIV 1
DIV 2
调用API实例代码
1 def testElementIsDisplay(self):
2 self.driver.get(r'file:///C:/Users/v-xug/Desktop/isdisplay.html')
3 # 找到div2元素
4 div2 = self.driver.find_element_by_id('div2')
5 # 判断div2元素是否可见
6 if div2.is_displayed():
7 print('div2 元素可见')
8 else:
9 print('div2 元素不可见')
10 # 点击第一个按钮
11 button1 = self.driver.find_element_by_id('button1')
12 button1.click()
13 # 再次判断div2元素是否可见
14 if div2.is_displayed():
15 print('div2 元素可见')
16 else:
17 print('div2 元素不可见')
18 #找到div4元素
19 div4 = self.driver.find_element_by_id('div4')
20 # 判断div4是否可见
21 if div4.is_displayed():
22 print('div4 元素可见')
23 else:
24 print('div4 元素不可见')
25 # 点击第二个按钮
26 button2 = self.driver.find_element_by_id('button2')
27 button2.click()
28 # 再次判断div4元素是否可见
29 if div4.is_displayed():
30 print('div4 元素可见')
31 else:
32 print('div4 元素不可见')
1 div2 元素不可见
2 div2 元素可见
3 div4 元素不可见
4 div4 元素可见
5 .
6 ----------------------------------------------------------------------
7 Ran 1 test in 9.288s
8
9 OK
10
11 Process finished with exit code 0
小结
通过代码的运行和输出结果,我们可以知道即使页面看不到的元素,webdriver也是可以找到的。因为隐藏的元素也是存在DOM树种的。
二、判断元素是否可操作用于测试的HTML代码
HTML 中不可操作元素
调用API实例代码
1 def testElementIsEnable(self):
2 self.driver.get(r'file:///C:/Users/v-xug/Desktop/isenable.html')
3 input1 = self.driver.find_element_by_id('input1')
4 if input1.is_enabled():
5 print('input1 可操作')
6 else:
7 print('input1 不可操作')
8 input2 = self.driver.find_element_by_id('input2')
9 if input2.is_enabled():
10 print('input2 可操作')
11 else:
12 print('input2 不可操作')
13 input3 = self.driver.find_element_by_id('input3')
14 if input3.is_enabled():
15 print('input3 可操作')
16 else:
17 print('input3 不可操作')
1 input1 可操作
2 input2 不可操作
3 .
4 ----------------------------------------------------------------------
5 Ran 1 test in 15.442s
6
7 OK
8 input3 可操作
9
10 Process finished with exit code 0
小结
从输出结果我们可以判断出,对元素添加了disabled属性后,元素将处于不可操作状态。
三、获取页面元素的属性用于测试的网址
http://www.sogou.com
调用APi实例代码
1 def testGetAttribute(self):
2 self.driver.get('http://www.sogou.com')
3 query = self.driver.find_element_by_id('query')
4 print(query.get_attribute('name'))
5 query.send_keys('python')
6 print(query.get_attribute('value'))
四、双击某个元素
模拟鼠标左键双击操作
测试的HTML代码
(当双击时,输入框会变成红色)
模拟鼠标双击操作
请双击
调用API实例代码
1 def testDoubleClick(self):
2 from selenium.webdriver import ActionChains # 模拟鼠标操作事件包
3 import time
4 self.driver.get(r'file:///C:/Users/v-xug/Desktop/doubleclick.html')
5 # 找到要操作的元素
6 time.sleep(3)
7 inputbox = self.driver.find_element_by_id('inputBox')
8 action = ActionChains(self.driver)
9 # 模拟鼠标双击操作
10 action.double_click(inputbox).perform()
11 time.sleep(3)
小结
selenium.webdriver.ActionChains 包是WebDriver针对Python语言提供的专门用于模拟鼠标操作事件的包,比如双击,悬浮,拖拽等,后面陆续介绍
五、操作单选下拉列表用于测试的HTML代码
操作下拉列表
桃子
西瓜
橘子
猕猴桃
山楂
荔枝
调用API实例代码
遍历所有选项并打印选项显示的文本和选项值
1 # 遍历下拉列表,获取下拉列表元素的所有显示值和value属性值
2 def testSelect(self):
3 import time
4 self.driver.get(r'file:///C:/Users/v-xug/Desktop/actionselect.html')
5 # 查找下拉列表元素
6 select = self.driver.find_element_by_name('fruit')
7 elements = select.find_elements_by_xpath("//option")
8 for element in elements:
9 print(element.text)
10 print(element.get_attribute('value'))
11 element.click()
12 time.sleep(1)
1 桃子
2 taozi
3 西瓜
4 xigua
5 橘子
6 juzi
7 猕猴桃
8 nihoutao
9 山楂
10 shanzha
11 荔枝
12 lizhi
13 .
14 ----------------------------------------------------------------------
15 Ran 1 test in 16.693s
16
17 OK
18
19 Process finished with exit code 0
选择下拉列表元素的三种方法
1 def testSelectOption(self):
2 import time
3 from selenium.webdriver.support.ui import Select
4 self.driver.get(r'file:///C:/Users/v-xug/Desktop/actionselect.html')
5 select_element = Select(self.driver.find_element_by_xpath('//select'))
6 # 打印默认选项
7 print(select_element.first_selected_option.text)
8 # 获取所有下拉选项元素
9 all_options = select_element.options
10 # 打印下拉选项的个数
11 print(len(all_options))
12 # 如果第二个选项可以操作且没有被选中,那么我们就选择这个选项
13 if all_options[1].is_enabled() and not all_options[1].is_selected():
14 # 第一个方法 通过序号选择选项 序号从0开始
15 select_element.select_by_index(1)
16 # 打印选中选项的文本
17 print(select_element.all_selected_options[0].text)
18 time.sleep(2)
19 # 第二种办法通过选项的文本选择选项
20 select_element.select_by_visible_text('猕猴桃')
21 # 断言选中的选项是否为猕猴桃
22 self.assertEqual(select_element.all_selected_options[0].text, '猕猴桃')
23 time.sleep(2)
24
25 # 第三种方法,通过选项的value属性值选择选项
26 select_element.select_by_value('shanzha')
27 print(select_element.all_selected_options[0].text)
28 self.assertEqual(select_element.all_selected_options[0].text, '山楂')
1 橘子
2 6
3 西瓜
4 山楂
5 .
6 ----------------------------------------------------------------------
7 Ran 1 test in 14.531s
8
9 OK
10
11 Process finished with exit code 0
小结
selenium'_element.all_selected_options 属性获取的是所有被选中项的对象组成的列表对象,由于本实例中是单选下拉列表,因此选中项只有一个,通过select_element.all_selected_options[0].text这句代码获取被选中项的文本内容
断言单选列表的选项值
1 def testAssertOptions(self):
2
3 from selenium.webdriver.support.ui import Select
4 self.driver.get(r'file:///C:/Users/v-xug/Desktop/actionselect.html')
5 select_element = Select(self.driver.find_element_by_xpath('//select'))
6 # 找到所有的下拉选项
7 actual_options = select_element.options
8 # 期望列表
9 expect_optionslist = ['桃子','西瓜','橘子','猕猴桃','山楂','荔枝']
10 # 获取所有的选项的文本值
11 actual_optionslist = [actual_options for actual_options in map(lambda option:option.text, actual_options)]
12 print(actual_optionslist)
13 # 断言
14 self.assertListEqual(expect_optionslist, actual_optionslist)
总结
今天就整理这些吧,后面还有挺多实例需要整理,也都是平时工作中会经常用到的API;文章中文字说明不是很多,代码比较多,大多数我都注释过了,因为我觉得只要有点基础的都能看的懂,搞太多文字反而没有用,按照我整理的实例,自己运行一下完全能明白!
今天的文章就到这里了哟,喜欢的小伙伴记得点赞收藏评论加关注哟。