使用Selenium WebDriver和Python入门自动化测试

<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"> </script> <script> mermaid.initialize({ startOnLoad: true, theme: 'default', flowchart: { curve: 'linear' } }); </script>

使用Selenium WebDriver和Python入门自动化测试

1. 准备工作

在开始使用Selenium WebDriver与Python进行自动化测试之前,需要确保我们的开发环境已经准备就绪。以下是详细的步骤,帮助你快速搭建好环境。

1.1 安装Python及Selenium包

Python是一种广泛使用的高级编程语言,适用于多种应用场景。为了确保我们能够顺利使用Selenium WebDriver进行自动化测试,首先需要安装Python。

安装Python
  1. 检查是否已安装Python
    大多数Linux发行版、Mac OS X和其他Unix机器默认安装了Python。如果你使用的是Windows系统,则需要单独安装Python。

  2. 下载并安装Python
    访问 Python官方网站 下载适合你操作系统的安装程序。本书中的所有示例都在Windows 8操作系统上使用Python 2.7和Python 3.0进行了测试。

安装Selenium包

Selenium WebDriver的Python客户端库包含在Selenium包中。最简便的安装方式是使用 pip 工具。

  1. 安装Selenium包
    打开命令行界面,运行以下命令:
    bash pip install -U selenium
    这条命令会下载并安装Selenium包的最新版本。 -U 标志表示升级已安装的包到最新版本。

  2. 手动安装(可选)
    如果你更喜欢手动安装,可以从 PyPI 下载Selenium包的源代码,解压缩后运行以下命令:
    bash python setup.py install

1.2 浏览Selenium WebDriver的Python文档

Selenium WebDriver的Python客户端库文档提供了关于其所有核心类和函数的详细信息。以下是几个有用的链接:
- 官方文档
- Selenium Wiki

2. 选择集成开发环境(IDE)

为了提高开发效率,选择一个合适的IDE非常重要。以下是几个推荐的IDE及其特点。

2.1 PyCharm

PyCharm是由JetBrains开发的一款功能强大的Python IDE,支持多种开发需求。以下是安装和配置PyCharm的步骤:

  1. 下载并安装PyCharm
    访问 PyCharm官方网站 下载并安装PyCharm。

  2. 配置Python解释器
    打开PyCharm,进入 File -> Settings -> Project -> Python Interpreter ,点击加号图标选择解释器路径。确保选择了正确的Python解释器版本。

  3. 创建新项目
    Create New Project 对话框中,点击 OK 按钮创建项目。

2.2 PyDev Eclipse插件

PyDev是一个Eclipse的Python插件,适合那些已经在使用Eclipse的开发者。以下是安装步骤:

  1. 安装PyDev
    打开Eclipse,进入 Help -> Eclipse Marketplace ,搜索 PyDev 并安装。

  2. 配置Python解释器
    安装完成后,进入 Window -> Preferences -> PyDev -> Interpreters -> Python Interpreter ,添加Python解释器路径。

2.3 PyScripter

PyScripter是一款轻量级的Python IDE,适合初学者。以下是安装步骤:

  1. 下载并安装PyScripter
    访问 PyScripter官方网站 下载并安装PyScripter。

  2. 配置Python解释器
    打开PyScripter,进入 Tools -> Configure Python Interpreter ,添加Python解释器路径。

3. 创建首个自动化脚本

现在我们已经设置好了开发环境,接下来将编写第一个自动化脚本。我们将使用一个简单的搜索工作流作为示例,演示如何使用Selenium WebDriver与Python进行自动化测试。

3.1 示例应用程序

我们将使用一个基于Magento框架的电子商务示例应用程序。该应用程序的地址为 http://demo.magentocommerce.com/

3.2 编写脚本

以下是编写自动化脚本的具体步骤:

  1. 创建Python文件
    在PyCharm的 Project Explorer 中,右键点击项目根目录,选择 New -> Python File ,创建一个新的Python文件。

  2. 编写代码
    在新建的Python文件中,编写如下代码:

from selenium import webdriver

# 创建一个新的Firefox会话
driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.maximize_window()

# 导航到示例应用程序主页
driver.get("http://demo.magentocommerce.com/")

# 获取搜索框元素
search_field = driver.find_element_by_name("q")
search_field.clear()

# 输入搜索关键词并提交
search_field.send_keys("phones")
search_field.submit()

# 获取当前结果页面上所有显示产品名称的锚点元素
products = driver.find_elements_by_xpath("//h2[@class='product-name']/a")

# 获取找到的锚点元素数量
print(f"Found {len(products)} products:")

# 遍历每个锚点元素并打印文本(产品名称)
for product in products:
    print(product.text)

# 关闭浏览器窗口
driver.quit()

这段代码实现了以下功能:
- 打开Firefox浏览器。
- 导航到示例应用程序主页。
- 清空搜索框并输入搜索关键词 phones
- 提交搜索请求。
- 获取搜索结果页面上的所有产品名称并打印。
- 关闭浏览器窗口。

4. 跨浏览器支持

为了确保自动化测试脚本能够在不同浏览器上正常运行,我们需要为每个浏览器设置相应的驱动程序。以下是针对Internet Explorer和Google Chrome的具体设置步骤。

4.1 设置Internet Explorer

  1. 下载InternetExplorerDriver
    访问 Selenium官方网站 下载InternetExplorerDriver。

  2. 配置驱动程序路径
    将下载的驱动程序文件解压缩,并将其路径添加到系统环境变量 PATH 中。

  3. 修改脚本
    修改脚本以使用InternetExplorerDriver。以下是修改后的代码:

from selenium import webdriver

# 设置InternetExplorerDriver路径
ie_driver_path = "C:\\path\\to\\IEDriverServer.exe"

# 创建一个新的IE会话
driver = webdriver.Ie(executable_path=ie_driver_path)
driver.implicitly_wait(30)
driver.maximize_window()

# 导航到示例应用程序主页
driver.get("http://demo.magentocommerce.com/")

# 获取搜索框元素
search_field = driver.find_element_by_name("q")
search_field.clear()

# 输入搜索关键词并提交
search_field.send_keys("phones")
search_field.submit()

# 获取当前结果页面上所有显示产品名称的锚点元素
products = driver.find_elements_by_xpath("//h2[@class='product-name']/a")

# 获取找到的锚点元素数量
print(f"Found {len(products)} products:")

# 遍历每个锚点元素并打印文本(产品名称)
for product in products:
    print(product.text)

# 关闭浏览器窗口
driver.quit()

4.2 设置Google Chrome

  1. 下载ChromeDriver
    访问 ChromeDriver官方网站 下载适合你操作系统的ChromeDriver。

  2. 配置驱动程序路径
    将下载的驱动程序文件解压缩,并将其路径添加到系统环境变量 PATH 中。

  3. 修改脚本
    修改脚本以使用ChromeDriver。以下是修改后的代码:

from selenium import webdriver

# 设置ChromeDriver路径
chrome_driver_path = "C:\\path\\to\\chromedriver.exe"

# 创建一个新的Chrome会话
driver = webdriver.Chrome(executable_path=chrome_driver_path)
driver.implicitly_wait(30)
driver.maximize_window()

# 导航到示例应用程序主页
driver.get("http://demo.magentocommerce.com/")

# 获取搜索框元素
search_field = driver.find_element_by_name("q")
search_field.clear()

# 输入搜索关键词并提交
search_field.send_keys("phones")
search_field.submit()

# 获取当前结果页面上所有显示产品名称的锚点元素
products = driver.find_elements_by_xpath("//h2[@class='product-name']/a")

# 获取找到的锚点元素数量
print(f"Found {len(products)} products:")

# 遍历每个锚点元素并打印文本(产品名称)
for product in products:
    print(product.text)

# 关闭浏览器窗口
driver.quit()

通过以上步骤,我们成功地设置了跨浏览器支持,确保了自动化测试脚本能够在多个浏览器上正常运行。

浏览器 驱动程序 下载链接
Internet Explorer InternetExplorerDriver Selenium官方网站
Google Chrome ChromeDriver ChromeDriver官方网站

5. 总结

通过上述步骤,我们已经成功搭建了Selenium WebDriver与Python的开发环境,并编写了第一个自动化测试脚本。此外,我们还设置了跨浏览器支持,确保了脚本能够在多个浏览器上正常运行。接下来,我们将进一步深入学习如何编写更复杂的测试用例,并探索更多高级功能。

6. 编写复杂的测试用例

在掌握了基础的自动化脚本编写后,我们可以开始编写更复杂的测试用例。这不仅能够提高测试的覆盖率,还能确保测试的准确性和可靠性。以下是编写复杂测试用例的一些关键点。

6.1 使用unittest库

Python的 unittest 库是一个强大的单元测试框架,可以帮助我们更好地组织和管理测试用例。以下是使用 unittest 编写测试用例的具体步骤:

  1. 导入必要的库
    在编写测试用例时,需要导入 unittest selenium 库。

  2. 创建测试类
    继承 unittest.TestCase 类,创建一个测试类。这个类将包含多个测试方法。

  3. 编写测试方法
    每个测试方法都应以 test_ 开头,并且可以在方法中编写具体的测试逻辑。

  4. 设置和清理
    使用 setUp() tearDown() 方法来设置测试环境和清理资源。

以下是使用 unittest 编写的一个示例测试用例:

import unittest
from selenium import webdriver
from selenium.webdriver.support.ui import Select

class CookiesTest(unittest.TestCase):
    def setUp(self):
        # 创建一个新的Firefox会话
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.driver.maximize_window()

        # 导航到示例应用程序主页
        self.driver.get("http://demo.magentocommerce.com/")

    def test_store_cookie(self):
        driver = self.driver

        # 获取语言选择下拉框
        select_language = Select(driver.find_element_by_id("select-language"))

        # 检查默认选中的选项是否为英文
        self.assertEqual("ENGLISH", select_language.first_selected_option.text)

        # 检查store cookie是否为空
        store_cookie = driver.get_cookie("store")
        self.assertEqual(None, store_cookie)

        # 选择法语选项
        select_language.select_by_visible_text("French")

        # 检查store cookie是否已更新为法语
        store_cookie = driver.get_cookie("store")['value']
        self.assertEqual("french", store_cookie)

    def tearDown(self):
        # 关闭浏览器窗口
        self.driver.quit()

if __name__ == '__main__':
    unittest.main(verbosity=2)

6.2 测试套件和HTML报告

为了更好地管理和执行多个测试用例,我们可以创建测试套件。同时,生成HTML格式的测试报告可以方便地分享测试结果。

  1. 创建测试套件
    使用 unittest.TestLoader().loadTestsFromTestCase() 方法加载测试用例,并创建测试套件。

  2. 生成HTML报告
    使用第三方库如 HTMLTestRunner 来生成HTML格式的测试报告。

以下是创建测试套件并生成HTML报告的示例代码:

import unittest
import HTMLTestRunner
import os

def create_suite():
    test_suite = unittest.TestSuite()
    test_suite.addTests(unittest.makeSuite(CookiesTest))
    return test_suite

if __name__ == '__main__':
    suite = create_suite()
    runner = HTMLTestRunner.HTMLTestRunner(
        verbosity=2,
        title="Test Report",
        description="This report contains the test results."
    )
    runner.run(suite)

6.3 使用页面对象模式

页面对象模式(Page Object Pattern)是一种设计模式,用于隐藏页面元素的定位器细节,并将页面上的操作封装到单独的类中。这使得测试用例更加简洁和易于维护。

  1. 创建页面对象类
    为每个页面创建一个页面对象类,封装页面上的元素和操作。

  2. 在测试用例中使用页面对象
    在测试用例中实例化页面对象类,并调用其方法来执行操作。

以下是使用页面对象模式的一个示例:

from selenium import webdriver

class HomePage:
    def __init__(self, driver):
        self.driver = driver

    def search_product(self, product_name):
        search_field = self.driver.find_element_by_name("q")
        search_field.clear()
        search_field.send_keys(product_name)
        search_field.submit()

class TestHomePage(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.driver.maximize_window()
        self.driver.get("http://demo.magentocommerce.com/")
        self.home_page = HomePage(self.driver)

    def test_search_products(self):
        self.home_page.search_product("phones")
        products = self.driver.find_elements_by_xpath("//h2[@class='product-name']/a")
        print(f"Found {len(products)} products:")
        for product in products:
            print(product.text)

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main(verbosity=2)

7. 使用Selenium WebDriver API进行元素交互

Selenium WebDriver提供了丰富的API,用于与网页元素进行交互。了解这些API的使用方法,可以帮助我们更高效地编写自动化测试脚本。以下是几个常用的API及其使用方法。

7.1 元素查找方法

Selenium WebDriver提供了多种查找元素的方法,可以根据不同的属性查找元素。以下是几种常见的查找方法:

  1. 使用ID属性
    find_element_by_id(id) :根据元素的ID属性查找元素。

  2. 使用名称属性
    find_element_by_name(name) :根据元素的名称属性查找元素。

  3. 使用类名
    find_element_by_class_name(class_name) :根据元素的类名查找元素。

  4. 使用标签名
    find_element_by_tag_name(tag_name) :根据元素的标签名查找元素。

  5. 使用XPath
    find_element_by_xpath(xpath) :根据XPath表达式查找元素。

  6. 使用CSS选择器
    find_element_by_css_selector(css_selector) :根据CSS选择器查找元素。

以下是使用不同查找方法的示例代码:

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.maximize_window()
driver.get("http://demo.magentocommerce.com/")

# 使用ID属性查找元素
element_by_id = driver.find_element_by_id("search")

# 使用名称属性查找元素
element_by_name = driver.find_element_by_name("q")

# 使用类名查找元素
element_by_class_name = driver.find_element_by_class_name("search-term")

# 使用标签名查找元素
element_by_tag_name = driver.find_element_by_tag_name("input")

# 使用XPath查找元素
element_by_xpath = driver.find_element_by_xpath("//input[@id='search']")

# 使用CSS选择器查找元素
element_by_css_selector = driver.find_element_by_css_selector("input#search")

driver.quit()

7.2 元素操作方法

除了查找元素外,Selenium WebDriver还提供了多种操作元素的方法。以下是几种常见的操作方法:

  1. 输入文本
    send_keys(keys) :向元素发送按键事件,通常用于输入文本。

  2. 清除文本
    clear() :清除元素中的文本内容。

  3. 点击元素
    click() :点击元素。

  4. 获取元素属性
    get_attribute(attribute_name) :获取元素的指定属性值。

  5. 检查元素是否可见
    is_displayed() :检查元素是否可见。

  6. 检查元素是否启用
    is_enabled() :检查元素是否启用。

  7. 检查复选框或单选按钮是否选中
    is_selected() :检查复选框或单选按钮是否选中。

以下是使用不同操作方法的示例代码:

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.maximize_window()
driver.get("http://demo.magentocommerce.com/")

# 获取搜索框元素
search_field = driver.find_element_by_name("q")

# 清除搜索框中的文本
search_field.clear()

# 输入搜索关键词
search_field.send_keys("phones")

# 提交搜索请求
search_field.submit()

# 获取搜索结果页面上的所有产品名称
products = driver.find_elements_by_xpath("//h2[@class='product-name']/a")

# 获取找到的产品数量
print(f"Found {len(products)} products:")

# 遍历每个产品并打印名称
for product in products:
    print(product.text)

# 检查元素是否可见
visible = search_field.is_displayed()
print(f"Search field is visible: {visible}")

# 检查元素是否启用
enabled = search_field.is_enabled()
print(f"Search field is enabled: {enabled}")

driver.quit()

8. 使用ActionChains类进行复杂操作

对于需要模拟复杂键盘和鼠标操作的测试场景,Selenium WebDriver提供了 ActionChains 类。通过 ActionChains 类,我们可以组合多个操作,实现更复杂的交互。

8.1 常见的ActionChains操作

以下是几种常见的 ActionChains 操作及其使用方法:

  1. 点击并按住元素
    click_and_hold(on_element=None) :点击并按住指定元素。

  2. 双击元素
    double_click(on_element=None) :双击指定元素。

  3. 拖拽元素
    drag_and_drop(source, target) :将一个元素拖拽到另一个元素上。

  4. 按下键盘键
    key_down(value, element=None) :按下指定键盘键。

  5. 释放键盘键
    key_up(value, element=None) :释放指定键盘键。

  6. 移动到元素上方
    move_to_element(to_element) :将鼠标移动到指定元素上方。

  7. 执行所有操作
    perform() :执行所有组合操作。

以下是使用 ActionChains 类的示例代码:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Firefox()
driver.implicitly_wait(30)
driver.maximize_window()
driver.get("http://demo.magentocommerce.com/")

# 获取搜索框元素
search_field = driver.find_element_by_name("q")

# 创建ActionChains对象
action = ActionChains(driver)

# 点击并按住搜索框
action.click_and_hold(search_field).perform()

# 输入搜索关键词
action.send_keys("phones").perform()

# 双击搜索框
action.double_click(search_field).perform()

# 移动到搜索框上方
action.move_to_element(search_field).perform()

# 提交搜索请求
search_field.submit()

# 获取搜索结果页面上的所有产品名称
products = driver.find_elements_by_xpath("//h2[@class='product-name']/a")

# 获取找到的产品数量
print(f"Found {len(products)} products:")

# 遍历每个产品并打印名称
for product in products:
    print(product.text)

driver.quit()

通过以上步骤,我们已经深入学习了如何使用Selenium WebDriver与Python进行自动化测试。我们不仅掌握了基础的自动化脚本编写,还学会了如何编写更复杂的测试用例,并探索了更多高级功能。接下来,我们将继续探索Selenium WebDriver的更多高级特性和应用场景。

mermaid流程图示例

graph TD; A[准备工作] --> B(安装Python及Selenium包); A --> C(选择集成开发环境); B --> D(安装Python); B --> E(安装Selenium包); C --> F(选择PyCharm); C --> G(选择PyDev Eclipse插件); C --> H(选择PyScripter); D --> I(检查是否已安装Python); D --> J(下载并安装Python); E --> K(使用pip安装Selenium包); E --> L(手动安装Selenium包); F --> M(下载并安装PyCharm); F --> N(配置Python解释器); F --> O(创建新项目); G --> P(安装PyDev); G --> Q(配置Python解释器); H --> R(下载并安装PyScripter); H --> S(配置Python解释器);

表格示例

测试用例 描述 预期结果
test_store_cookie 测试语言选择下拉框和store cookie的行为 默认选中英文,选择法语后store cookie更新为”french”
test_search_products 测试搜索功能 输入关键词”phones”后,找到并打印所有匹配的产品名称

通过这些内容,我们已经全面掌握了使用Selenium WebDriver与Python进行自动化测试的基本方法和技巧。希望这篇文章能够帮助你更好地理解和应用这些技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_te_download_001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值