Python3 Selenium自动化web测试 ==> 第三节 常用WebDriver API使用示例上(24个API)

前置步骤:


安装selenium,chrome驱动,Python3.6

学习目的:


掌握元素定位以外的其他操作。

涉及的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

相关推荐