HOME AUTHORS

Python+Selenium实现Web自动化测试

2022年3月24日 02:01
ali
Tags select selenium 元素

selenium介绍

selenium是一个基于浏览器的自动化测试框架,提供了跨平台、跨浏览器的端到端的web自动化解决方案。

主要包括三部分:Selenium IDE,Selenium WebDriver,Selenium Grid

Selenium IDE

firefox的一个扩展,可以进行录制、回放,并把录制的操作以多种语言(例如java,python等)的形式导出成测试用例

image

Selenium WebDriver

提供Web自动化所需要的API,主要用于浏览器控制,页面元素选择和调试。不同的浏览器需要不同的WebDriver

Selenium Grid

提供了在不同机器上的不同浏览器上运行selenium测试的能力

安装selenium

pip install selenium

下载对应的浏览器驱动

这里下载的是firefox浏览器的驱动,放在/usr/local/bin目录下面

image

demo

以下代码会在浏览器中执行:

# Generated by Selenium IDE
import time
from selenium import webdriver
from time import sleep

class TestFirsttest:
    def setup_method(self, method):
        self.driver = webdriver.Firefox()
        self.vars = {}

    def teardown_method(self, method):
        self.driver.quit()

    def wait_for_window(self, timeout=2):
        time.sleep(round(timeout / 1000))
        wh_now = self.driver.window_handles
        wh_then = self.vars["window_handles"]
        if len(wh_now) > len(wh_then):
            return set(wh_now).difference(set(wh_then)).pop()

    def test_firsttest(self):
        #进入blog网站
        self.driver.get("https://some2501.me/blog/author/ali/")
        #缩放浏览器窗口大小,宽为800,高为400
        self.driver.set_window_size(800, 400)
        #等待3秒
        sleep(3)
        # 刷新页面
        self.driver.refresh()
        # 等待3秒
        sleep(3)
        # 最大化窗口
        self.driver.maximize_window()
        # 退出浏览器
        self.driver.quit()

元素定位方式

XPath是用来定位xml文档节点的语言

通过f12打开浏览器开发者工具,定位到元素的位置之后,在查看器的相应html代码处右键选择复制-XPath就能得到该元素的xpath路径

driver.find_element(By.XPATH,"/html/body/div[2]/div[3]/a[1]/h3")

拿到对应元素的ID

driver.find_element(By.ID,"input_button")

如果没有元素匹配,会抛出NoSuchElementException异常

driver.find_element(By.NAME,"nameField")

在name定位里,会返回第一个name属性匹配的元素,如果没有元素匹配,会抛出NoSuchElementException异常

如果知道一个锚标签使用了什么文本,可以使用这种方法。会返回第一个文本属性匹配的链接,如果没有元素匹配,会抛出NoSuchElementException异常

例如<a href="./home">HOME</a>,那对应的link text就是HOME

driver.find_element(By.LINK_TEXT,"HOME")

元素交互

进行了元素定位之后,就可以进行元素的交互,常见的交互有:

元素信息

可以获得元素当前的一些信息

特殊的选择列表

针对选择列表元素,selenium提供了比较便捷的方法获取其中的元素

在selenium的support包中有一个select类,可以将它导入:

from selenium.webdriver.support.select import Select

例如有一个select列表如下:

          <select id="test_select">
              <option value=value1>Bread</option>
              <option value=value2 selected>Milk</option>
              <option value=value3>Cheese</option>
          </select>