Webdriver之API详解(二)

上一篇文章地址: https://mp.csdn.net/postedit/86574769

目录

⑪判断页面元素是否可见

 用于测试的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实例代码

def testElementIsDisplay(self):
        self.driver.get(r'file:///C:/Users/v-xug/Desktop/isdisplay.html')
        # 找到div2元素
        div2 = self.driver.find_element_by_id('div2')
        # 判断div2元素是否可见
        if div2.is_displayed():
            print('div2 元素可见')
        else:
            print('div2 元素不可见')
        # 点击第一个按钮
        button1 = self.driver.find_element_by_id('button1')
        button1.click()
        # 再次判断div2元素是否可见
        if div2.is_displayed():
            print('div2 元素可见')
        else:
            print('div2 元素不可见')
        #找到div4元素
        div4 = self.driver.find_element_by_id('div4')
        # 判断div4是否可见
        if div4.is_displayed():
            print('div4 元素可见')
        else:
            print('div4 元素不可见')
        # 点击第二个按钮
        button2 = self.driver.find_element_by_id('button2')
        button2.click()
        # 再次判断div4元素是否可见
        if div4.is_displayed():
            print('div4 元素可见')
        else:
            print('div4 元素不可见')

判断元素是否可见
div2 元素不可见
div2 元素可见
div4 元素不可见
div4 元素可见
.
----------------------------------------------------------------------
Ran 1 test in 9.288s

OK

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实例代码 

def testElementIsEnable(self):
        self.driver.get(r'file:///C:/Users/v-xug/Desktop/isenable.html')
        input1 = self.driver.find_element_by_id('input1')
        if input1.is_enabled():
            print('input1 可操作')
        else:
            print('input1 不可操作')
        input2 = self.driver.find_element_by_id('input2')
        if input2.is_enabled():
            print('input2 可操作')
        else:
            print('input2 不可操作')
        input3 = self.driver.find_element_by_id('input3')
        if input3.is_enabled():
            print('input3 可操作')
        else:
            print('input3 不可操作')

判断元素是否可操作
input1 可操作
input2 不可操作
.
----------------------------------------------------------------------
Ran 1 test in 15.442s

OK
input3 可操作

Process finished with exit code 0

输出

 小结

从输出结果我们可以判断出,对元素添加了disabled属性后,元素将处于不可操作状态。

⑬获取页面元素的属性

用于测试的网址

http://www.sogou.com

调用APi实例代码

def testGetAttribute(self):
        self.driver.get('http://www.sogou.com')
        query = self.driver.find_element_by_id('query')
        print(query.get_attribute('name'))
        query.send_keys('python')
        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实例代码

def testDoubleClick(self):
        from selenium.webdriver import ActionChains # 模拟鼠标操作事件包
        import time
        self.driver.get(r'file:///C:/Users/v-xug/Desktop/doubleclick.html')
        # 找到要操作的元素
        time.sleep(3)
        inputbox = self.driver.find_element_by_id('inputBox')
        action = ActionChains(self.driver)
        # 模拟鼠标双击操作
        action.double_click(inputbox).perform()
        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>

 1.遍历所有选项并打印选项显示的文本和选项值

调用API实例代码

# 遍历下拉列表,获取下拉列表元素的所有显示值和value属性值
    def testSelect(self):
        import time
        self.driver.get(r'file:///C:/Users/v-xug/Desktop/actionselect.html')
        # 查找下拉列表元素
        select = self.driver.find_element_by_name('fruit')
        elements = select.find_elements_by_xpath("//option")
        for element in elements:
            print(element.text)
            print(element.get_attribute('value'))
            element.click()
            time.sleep(1)

遍历单选列表
桃子
taozi
西瓜
xigua
橘子
juzi
猕猴桃
nihoutao
山楂
shanzha
荔枝
lizhi
.
----------------------------------------------------------------------
Ran 1 test in 16.693s

OK

Process finished with exit code 0

输出

 2.选择下拉列表元素的三种方法

def testSelectOption(self):
        import time
        from selenium.webdriver.support.ui import Select
        self.driver.get(r'file:///C:/Users/v-xug/Desktop/actionselect.html')
        select_element = Select(self.driver.find_element_by_xpath('//select'))
        # 打印默认选项
        print(select_element.first_selected_option.text)
        # 获取所有下拉选项元素
        all_options = select_element.options
        # 打印下拉选项的个数
        print(len(all_options))
        # 如果第二个选项可以操作且没有被选中,那么我们就选择这个选项
        if all_options[1].is_enabled() and not all_options[1].is_selected():
            # 第一个方法 通过序号选择选项 序号从0开始
            select_element.select_by_index(1)
            # 打印选中选项的文本
            print(select_element.all_selected_options[0].text)
        time.sleep(2)
        # 第二种办法通过选项的文本选择选项
        select_element.select_by_visible_text('猕猴桃')
        # 断言选中的选项是否为猕猴桃
        self.assertEqual(select_element.all_selected_options[0].text, '猕猴桃')
        time.sleep(2)

        # 第三种方法,通过选项的value属性值选择选项
        select_element.select_by_value('shanzha')
        print(select_element.all_selected_options[0].text)
        self.assertEqual(select_element.all_selected_options[0].text, '山楂')

选择下拉列表的3中方法
橘子
6
西瓜
山楂
.
----------------------------------------------------------------------
Ran 1 test in 14.531s

OK

Process finished with exit code 0

输出

 小结:selenium'_element.all_selected_options 属性获取的是所有被选中项的对象组成的列表对象,由于本实例中是单选下拉列表,因此选中项只有一个,通过select_element.all_selected_options[0].text这句代码获取被选中项的文本内容

 3.断言单选列表的选项值

def testAssertOptions(self):

        from selenium.webdriver.support.ui import Select
        self.driver.get(r'file:///C:/Users/v-xug/Desktop/actionselect.html')
        select_element = Select(self.driver.find_element_by_xpath('//select'))
        # 找到所有的下拉选项
        actual_options = select_element.options
        # 期望列表
        expect_optionslist = ['桃子','西瓜','橘子','猕猴桃','山楂','荔枝']
        # 获取所有的选项的文本值
        actual_optionslist = [actual_options for actual_options in  map(lambda option:option.text, actual_options)]
        print(actual_optionslist)
        # 断言
        self.assertListEqual(expect_optionslist, actual_optionslist)

 总结

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

真的勇士, 敢于直面惨淡的warning、 敢于正视淋漓的error

猜你喜欢

转载自blog.csdn.net/C_TestMG/article/details/86605456