zoukankan      html  css  js  c++  java
  • 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, '山楂')
    选择下拉列表的3中方法
     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)
    View Code

    总结

    今天就整理这些吧,后面还有挺多实例需要整理,也都是平时工作中会经常用到的API;文章中文字说明不是很多,代码比较多,大多数我都注释过了,因为我觉得只要有点基础的都能看的懂,搞太多文字反而没有用,按照我整理的实例,自己运行一下完全能明白!当然不明白的可以加我qq!

  • 相关阅读:
    【转】三层架构,MVC, ASP.net MVC的区别
    code-Behind
    从输入 URL 到页面加载完成的过程中都发生了什么事情?
    javascript杂谈
    网页设计中透明效果的使用技巧
    phpstorm+Xdebug断点调试PHP
    MySql IFNULL 联表查询出来的null 如何赋值
    php读取目录下的文件
    CI框架程序--本地调试之后部署新浪SAE
    各个手机APP客户端内置浏览器useragent
  • 原文地址:https://www.cnblogs.com/linuxchao/p/linuxchao-selenium-apitwo.html
Copyright © 2011-2022 走看看