zoukankan      html  css  js  c++  java
  • Python3 Selenium自动化web测试 ==> 第三节 常用WebDriver API使用示例上(24个API)

    前置步骤:


     

      安装selenium,chrome驱动,Python3.6

    学习目的:


     

       常见API的使用

    涉及的API:


     

    step1: 访问一个网址

    step2: 网页的前进和后退

    step3: 刷新当前页面

    step4: 浏览器窗口最大化

    step5: 获取并设置当前窗口的位置

    step6: 获取并设置当前窗口的大小

    step7: 获取页面的title属性值

    step8: 获取页面HTML源代码

    step9: 获取当前页面的URL

    step10: 获取与切换浏览器窗口句柄

    step11:获取页面元素的基本信息

    step12: 获取页面元素的文本内容

    step13: 判断页面元素是否可见

    step14: 判断页面元素是否可操作

    step15: 获取页面元素的属性

    step16: 获取页面的CSS属性值

    step17: 情况输入框中的内容

    step18: 在输入框中输入指定的内容

    step19: 单击按钮

    step20: 双击某个元素

    step21: 操作单选下拉列表

    step22: 断言单选列表选项值

    step23: 操作多选的选择列表

    step24: 操作可以输入的下拉列表

    正式步骤:


     

      测试使用的unittest框架代码如下:

      

    # -*-  coding:utf-8 -*-
    from selenium import webdriver
    import unittest
    
    class WebdriverAPI(unittest.TestCase):
        def setUp(self):
            # 每个用例都执行,在单个用例运行前执行
            #打开浏览器
            self.driver = webdriver.Chrome()
    
        def tearDown(self):
            #每个用例都执行,在单个用例运行后执行
            #退出浏览器
            self.driver.quit()
    
        def test_visitURL(self):
            #测试步骤
            pass
        
    
    if __name__ == '__main__':
        unittest.main()

    step1: 访问一个网址

        def test_visitURL(self):
            url = 'https://www.baidu.com/'
            self.driver.get(url)
            assert self.driver.title == '百度一下,你就知道'
            print(self.driver.title)

    step2: 网页的前进和后退

        def test_visitHistoryPage(self):
            firstUrl = 'https://www.baidu.com/'
            secondUrl = 'https://cn.bing.com/'
            #访问第一个网址
            self.driver.get(firstUrl)
            time.sleep(2)
            #访问第二个网址
            self.driver.get(secondUrl)
            time.sleep(2)
            #回到百度网址
            self.driver.back()
            time.sleep(2)
            #再回到bing
            self.driver.forward()
            time.sleep(2)

    step3: 刷新当前页面

    self.driver.refresh()

    step4: 浏览器窗口最大化

            #窗口最大化
            self.driver.maximize_window()

    step5: 获取并设置当前窗口的位置

            #获取浏览器位置
            position = self.driver.get_window_position()
            #打印出浏览器的坐标
            print('当前窗口x轴%s,y轴%s'%(position['x'],position['y']))
            #设置浏览器的位置
            self.driver.set_window_position(x = 100,y = 100)
            time.sleep(2)

      

    step6: 获取并设置当前窗口的大小

            #获取浏览器窗口大小
            window_size = self.driver.get_window_size()
            print('current size %s :'%window_size)
            print('宽%s,高%s'%(window_size['width'],window_size['height']))
            #重新设置窗口大小
            self.driver.set_window_size(width=1000,height=1000)

    step7: 获取页面的title属性值

            #获取并打印页面title
            page_title = self.driver.title
            print(page_title)
            #断言页面title内容
            self.assertEqual(page_title,'百度一下,你就知道1','页面属性值错误')

    step8: 获取页面HTML源代码

            #获取页面的HTML源代码
            page_source = self.driver.page_source
            print(page_source)
            #断言源码是否包含关键字百度,显然会有回显信息打印出来,正确则没有回显msg
            self.assertTrue('百度#'in page_source,'不包含')

    step9: 获取当前页面的URL

            #获取当前页面url
            self.driver.get(firstUrl)
            correntPageUrl = self.driver.current_url
            print(correntPageUrl)

    step10: 获取与切换浏览器窗口句柄

            #获取与切换浏览器窗口句柄
            self.driver.get(firstUrl)
            #获取当前窗口的句柄
            firstHander = self.driver.current_window_handle
            #打印获取的第一个窗口句柄
            print(firstHander)
            #输入框输入检索内容:selenium
            self.driver.find_element_by_id('kw').send_keys('selenium3')
            #单击搜索按钮
            self.driver.find_element_by_id('su').click()
            #设置等待时间3s
            time.sleep(3)
            #单击需要点击的网页链接
            self.driver.find_element_by_partial_link_text('Python+Selenium3最新配置 - CSDN博客').click()
            time.sleep(3)
            #获取所有的句柄
            allHander = self.driver.window_handles
            print('当前窗口句柄:'+ allHander[-1])
            #获取所有窗口句柄
            for hander in allHander:
                print(hander)
            #将操作句柄切换到当前窗口
            self.driver.switch_to.window(allHander[-1])
            time.sleep(3)
            #可以关闭当前窗口,不然关闭的是firstUrl
            self.driver.close()
            time.sleep(3)
            print(firstHander)
            self.driver.switch_to.window(firstHander)
            self.driver.find_element_by_id('kw').clear()
            time.sleep(2)

    step11:获取页面元素的基本信息

            firstUrl = 'https://www.baidu.com/'
            self.driver.get(firstUrl)
            testElement = self.driver.find_element_by_xpath("//a[text()='新闻']")
            print(testElement.tag_name,testElement.size)

    step12: 获取页面元素的文本内容

            testElementText = self.driver.find_element_by_xpath("//a[text()='新闻']")
            print(testElementText.text)

    step13: 判断页面元素是否可见

            testElementVisiable = self.driver.find_element_by_xpath("//a[text()='新闻']")
            print(testElementVisiable.is_displayed())

    step14: 判断页面元素是否可操作,是否已选

            testElementVisiable = self.driver.find_element_by_xpath("//a[text()='新闻']")
            print(testElementVisiable.is_displayed())
            #判断页面元素是否可操作
            print(testElementVisiable.is_enabled())

    step15: 获取页面元素的属性

            #获取页面元素属性
            attribution = testElementVisiable.get_attribute('class')
            print(attribution)
            attribution1 = testElementVisiable.get_attribute('name')
            print(attribution1)
            attribution2 = testElementVisiable.get_attribute('text')
            print(attribution2)

    step16: 获取页面的CSS属性值

            css_property = self.driver.find_element_by_xpath("//a[text()='新闻']")
            print(css_property.value_of_css_property('height'))
            print(css_property.value_of_css_property('width'))
            print(css_property.value_of_css_property('font-size'))

    step17: 清空输入框中的内容

            self.driver.find_element_by_id('kw').send_keys('test')
            self.driver.find_element_by_id('kw').clear()

    step18: 在输入框中输入指定的内容

    self.driver.find_element_by_id('kw').send_keys('test')

    step19: 单击按钮

    self.driver.find_element_by_partial_link_text('Python+Selenium3最新配置 - CSDN博客').click()

    step20: 双击某个元素

            input = self.driver.find_element_by_id('kw')
            input.send_keys('双击全选,背景高亮')
            from selenium.webdriver import ActionChains
            action_chains = ActionChains(self.driver)
            #双击后,高亮两个字背景高亮,只是为了证明双击起效了
            action_chains.double_click(input).perform()
            time.sleep(3)

    step21: 操作单选下拉列表

    测试用下拉html页面代码

    <html>
    <body>
    <form>
    <select name="cars">
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="fiat">Fiat</option>
    <option value="audi">Audi</option>
    </select>
    </form>
    </body>
    </html>

    测试脚本:

            #操作简单的下拉列表
            url = 'F:\python_stack\python_autotest\webdriver_api\xiala.html'
            self.driver.get(url)
            all_options = self.driver.find_elements_by_tag_name('option')
            for option in all_options:
                print(option.text)
                print(option.get_attribute('value'))
                option.click()
                time.sleep(1)

    step22: 断言单选列表选项值

            url = 'F:\python_stack\python_autotest\webdriver_api\xiala.html'
            self.driver.get(url)
            from selenium.webdriver.support.ui import Select
            select_element = Select(self.driver.find_element_by_name('cars'))
            current_options = select_element.options
            current_optionsList = []
            #遍历options,并生成option文本值的列表
            for option in current_options:
                print(option.text)
                current_optionsList.append(option.text)
    
            print(current_optionsList)
            expect_optionsList = ['Volvo','Saab','Fiat','Audi']
            #断言两个列表是否相同
            self.assertListEqual(current_optionsList,expect_optionsList)

    step23: 操作多选的选择列表

            url = 'F:\python_stack\python_autotest\webdriver_api\xiala.html'
            self.driver.get(url)
            from selenium.webdriver.support.ui import Select
            select_element = Select(self.driver.find_element_by_name('cars'))
            select_element.select_by_index(0)
            select_element.select_by_visible_text('Fiat')
            select_element.select_by_value('audi')
            time.sleep(3)
            #取消选中的单位
            select_element.deselect_all()
            time.sleep(3)

    step24: 操作可以输入的下拉列表

    测试用HTML代码

    <!DOCTYPE html>
    <html>
    <body>
    <div style="position: relative;">
    <input list="pasta" id = "select">
        <datalist id ="pasta">
            <option>C</option>
            <option>Java</option>
            <option>Python</option>
            <option>C#</option>
            <option>Ruby</option>
        </datalist>
    </div>
    </body>
    </html>

    测试脚本:

            #带输入的下拉列表操作
            url = 'F:\python_stack\python_autotest\webdriver_api\data.html'
            self.driver.get(url)
            from selenium.webdriver.support.ui import Select
            from selenium.webdriver.common.keys import Keys
            self.driver.find_element_by_id("select").clear()
            time.sleep(1)
            #输入的同时向下按箭头
            self.driver.find_element_by_id("select").send_keys("Java",Keys.ARROW_DOWN)
            time.sleep(2)
            self.driver.find_element_by_id("select").send_keys(Keys.ENTER)
            time.sleep(2)

    难点分析:


     

     API看似简单,实际的简单应用中,还是花了很多时间去实际运行,眼高手低不好

    学习总结:


     

     还有24个常用API,下班后继续

    参考资料:

    参考英文官方资料:http://selenium-python.readthedocs.io/locating-elements.html

  • 相关阅读:
    vue项目搭建步骤
    文件的操作总结
    WPF 使用皮肤影响按钮自定义
    WPF中:未找到可以 register Name“XXX”的 NameScope
    WPF Label或者其他控件(以Content显示内容的)单个下划线不显示的问题。
    wpf 中GridControl后面总是多一空白列
    WPF设置控件层次问题(最顶层,最底层)
    WPF中设置TreeView的高度随着窗口改变
    C# 检测文件是否被其他进程占用
    XML文件的操作
  • 原文地址:https://www.cnblogs.com/wuzhiming/p/8860087.html
Copyright © 2011-2022 走看看