Webdriver之API详解(2)
前言
今天继续上一篇文章https://www.cnblogs.com/linuxchao/p/linuxchao-selenium-apione.html分享selenium' webdriver api的用法,
⑪判断页面元素是否可见
用于测试的HTML代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>HTML中显示与隐藏元素</title> <meta http-equiv="Content-Type" content="text/html"; charset="utf-8" /> <script type="text/javascript"> 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'; } </script> </head> <body> <div>display:元素不占用页面位置</div> <div id="div1" style="display: block;">DIV 1</div> <div id="div2" style="display: none;">DIV 2</div> <input id="button1" type="button" onclick="showAndHidden1();" value="DIV切换" /> <hr> <div>visibility:元素占用页面位置</div> <div id="div3" style="visibility: visible;">DIV 1</div> <div id="div4" style="visibility: hidden;">DIV 2</div> <input id="button2" type="button" onclick="showAndHidden2();" value="DIV切换" /> </body> </html>
调用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代码
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8"/> <title>HTML 中不可操作元素</title> </head> <body> <input id="input1" type="text" size="40" value="可操作"> <br /> <input id="input2" type="text" size="40" value="不可用" disabled> <br /> <input id="input3" type="text" size="40" value="只读" readonly> </body> </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代码
(当双击时,输入框会变成红色)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>模拟鼠标双击操作</title> </head> <body> <input id="inputBox" type="text" ondblclick="javascript:this.style.background='red'">请双击</> </body> </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代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>操作下拉列表</title> </head> <body> <select name="fruit" size="1"> <option id="peach" value="taozi">桃子</option> <option id="watermelon" value="xigua">西瓜</option> <option id="orange" value="juzi" selected="selected">橘子</option> <option id="kiwifruit" value="nihoutao">猕猴桃</option> <option id="maybush" value="shanzha">山楂</option> <option id="litchi" value="lizhi">荔枝</option> </select> </body> </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;文章中文字说明不是很多,代码比较多,大多数我都注释过了,因为我觉得只要有点基础的都能看的懂,搞太多文字反而没有用,按照我整理的实例,自己运行一下完全能明白!当然不明白的可以加我qq!
----------------------------真正的勇士, 敢于直面惨淡的Warning、 敢于正视淋漓的Error--------------------------
版权声明
出处: 博客园Linux超的技术博客--https://www.cnblogs.com/linuxchao/
您的支持是对博主最大的鼓励,感谢您的认真阅读
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
作者: Linux超