python自动化测试实战 —— WebDriver API的使用

简介: python自动化测试实战 —— WebDriver API的使用

软件测试专栏


实战相关知识

      Selenium 简介

      WebDriver是Selenium Tool套件中最重要的组件。Selenium 2.0之后已经将Selenium和WebDriver进行合并,作为一个更简单、简洁、有利于维护的API提供给测试人员使用。 它提供了一套标准的接口,可以用多种编程语言调用,并且和浏览器进行交互。

      WebDriver可以对浏览器进行控制,包括输入URL,点击按钮,填写表单,滚动页面,甚至是执行JavaScript代码。同时,它也能够获取网页中的信息,如文本,标签,属性等,以便进行测试。

      WebDriver支持多种浏览器,包括Chrome、Firefox、Edge、Safari和Internet Explorer等。它还提供了丰富的API,用于测试,如元素定位,页面等待,操作模拟等。

      通过使用WebDriver,可以快速、自动化地进行web应用程序测试,从而提升测试效率和质量。同时,它也是Web应用程序开发人员进行自动化测试的最佳工具之一。

      在软件UI自动化测试中,测试人员用WebDriver API编写测试脚本。

      使用WebDriver API对网页UI进行测试的步骤:

  • 分析测试需求,确定测试目标页面的UI元素
  • 编写脚本,逐个定位测试目标元素
  • 对测试目标元素进行对应的测试操作

实战内容

1. “百度翻译”的页面UI测试

(1)到“百度翻译”网页 (https://fanyi.baidu.com/)查看要测试的页面。

(2)确定要测试的UI元素目标。

  • 语言按钮:打开下拉框,选择语言
  • 转换按钮:点击,测试语言是否转换
  • 翻译按钮:点击,测试翻译文本
  • 输入框:测试输入框,语言错误提示,删除
  • 翻译记录:查看翻译记录,并删除

测试的内容需要注意的是:

  1. 输入框是否可以正常输入文本。
  2. 输入框是否可以清空。
  3. 输入框输入文本后,是否可以正常进行翻译。
  4. 翻译结果是否正确显示。
  5. 测试结果是否符合预期,即翻译结果是否与预期一致。

      这些测试内容应该在多种情况下进行测试,如输入不同长度的文本、输入不同语言的文本等,以保证测试的全面性和准确性。

(3)编写脚本,定位测试目标元素,并对元素进行对应的测试操作。

  • 代码截图:


  • 运行结果:
  1. 打开百度翻译页面截图

  2. 选择翻译和被翻译的语言截图
  3. 转换翻与被翻语言截图

  4. 断言提示语截图

  5. 断言翻译结果为“自动化实验”截图

  6. 翻译记录截图

2. “新浪微博”的两个页面UI测试

(1)访问“新浪微博”网页 ,(https://weibo.com/)。

登录个人账号后,出现个人页面。

(2)确定要测试的UI元素目标。

新浪微博的首页:

  • 搜索框:输入框、搜索按钮
  • 左侧菜单栏:文字链接
  • 顶栏:分类、下拉框
  • 登录:弹框、内容

新浪微博的个人页面:

  • 文本框:输入框
  • 快捷窗口:表情、图片、话题、下拉框、公开、发送

测试的内容需要注意的是:

  1. 登录页面的元素是否可以正常加载。
  2. 登录按钮是否可以正常点击,是否可以进入登录状态。
  3. 发布微博的输入框是否可以正常输入文本。
  4. 发布按钮是否可以正常点击,是否可以成功发布微博。
  5. 评论按钮是否可以正常点击,是否可以进入评论状态。
  6. 评论输入框是否可以正常输入文本。
  7. 发表按钮是否可以正常点击,是否可以成功发表评论。

     这些测试内容应该在多种情况下进行测试,如输入不同长度的文本、输入不同类型的文本等,以保证测试的全面性和准确性。同时需要注意测试过程中的网络和页面加载速度等因素,以保证测试的稳定性和准确性

(3)编写脚本,定位测试目标元素,并对元素进行对应的测试操作。

  • 代码截图:



  • 运行结果:
    搜索结果.png

下拉框.png

登录个人页面.png

发布.png

发布完成截图

操作异常问题与解决方案

  • 问题一:Message: element not interactable
  • 解决方法:不可交互元素,具体查找资料,通过selenium调用js代码实现
js1 = 'var txt = document.getElementById("baidu_translate_input"); txt.value="自动化实验";'
driver.execute_script(js1)

  • 问题二:Message: session not created: This version of ChromeDriver only supports Chrome version 110
  • 解决方法:问题描述:你的ChromeDriver(Chrome驱动器)版本只能维持 Chrome(谷歌浏览器)110版本的,而我当前的Chrome 版本是 113.0.5672.64,路径***** 。
    这个问题的解决办法也很简单,有两种办法:
    第一种:换浏览器
    第二钟:换ChromeDirver驱动,安装新的ChromeDirver驱动
    具体解决步骤:【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver

附录

  • “百度翻译”的页面UI测试
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://fanyi.baidu.com/")
# 隐式等待
driver.implicitly_wait(10)
# 删除广告弹框
driver.find_element(By.CLASS_NAME, 'app-guide-close').click()
# 选择翻译的语言为英文
sleep(1)
driver.find_element(By.XPATH, '//*[@id="main-outer"]/div/div/div[1]/div[1]/div[1]/a[3]/span').click()
sleep(1)
driver.find_element(By.XPATH, '//*[@id="lang-panel-container"]/div/div[5]/div[1]/div[21]/div/span[1]').click()
# 选择被翻译的语言为中文
sleep(1)
driver.find_element(By.XPATH, '//*[@id="main-outer"]/div/div/div[1]/div[1]/div[1]/a[1]/span').click()
sleep(1)
driver.find_element(By.XPATH, '//*[@id="lang-panel-container"]/div/div[5]/div[1]/div[22]/div/span[1]').click()
# 转换翻与被翻语言
sleep(1)
driver.find_element(By.CLASS_NAME, 'exchange-mask').click()
sleep(1)
# 测试语言错误提示,在英文输入框输入中文‘自动化实验’
# 文本框输入
js1 = 'var txt = document.getElementById("baidu_translate_input"); txt.value="自动化实验";'
driver.execute_script(js1)
# 点击翻译
driver.find_element(By.ID, 'translate-button').click()
# 断言提示语
title = driver.find_element(By.XPATH, '//*[@id="main-outer"]/div/div/div[1]/div[2]/div[1]/div[1]'
                                      '/div/div[2]/div[3]/div[3]/p/span').text
assert title == '您输入的可能是:'
# 文本框输入
js2 = 'var txt = document.getElementById("baidu_translate_input"); txt.value="Automatic experiment";'
driver.execute_script(js2)
# 翻译
driver.find_element(By.ID, 'translate-button').click()
sleep(2)
# 断言翻译结果为“自动化实验”
title = driver.find_element(By.CLASS_NAME, 'output-bd').text
assert title == '自动化实验'
# 为了显示翻译记录
input = driver.find_element(By.CLASS_NAME, 'textarea')
input.clear()
input.click()
# 点击翻译记录
driver.find_element(By.CLASS_NAME, 'history-btn').click()
driver.save_screenshot('翻译记录.png')
sleep(1)
# 关闭翻译记录
js3 = "document.querySelector('body > div:nth-child(12) > div > " \
     "div.ant-modal-wrap.modal-container > div > div.ant-modal-content > button > span').click()"
driver.execute_script(js3)
sleep(1)
driver.quit()
  • “新浪微博”的两个页面UI测试
import os
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://weibo.com/newlogin?tabtype=weibo&gid="
           "102803&openLoginLayer=0&url=https%3A%2F%2Fweibo.com%2F")
driver.implicitly_wait(10)  # 隐式等待
# 测试搜索框
driver.find_element(By.CLASS_NAME, 'woo-input-main').send_keys('web')
driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[1]/div[1]/div/div[2]/div[2]/button').click()
handles = driver.window_handles  # 获取当前浏览器的所有窗口句柄
driver.switch_to.window(handles[-1])  # 切换到最新打开的窗口
driver.save_screenshot('搜索结果.png')
driver.switch_to.window(handles[0])  # 切换到最开始打开的窗口
sleep(2)
# 测试左侧菜单栏
driver.find_element(By.LINK_TEXT, '热门榜单').click()
sleep(2)
driver.back()
sleep(2)
# 测试顶栏
driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[2]/div[2]/main'
                              '/div/div/div[1]/div/div/div/div[2]/div/div').click()
# 测试顶栏下拉框
driver.find_element(By.CSS_SELECTOR, '#app > div.woo-box-flex.woo-box-column.Frame_wrap_3g67Q > div.woo-box-flex'
                                     '.Frame_content_3XrxZ.Frame_noside1_3M1rh > div.Frame_main_3Z_V0 > main > div '
                                     '> div > div.SecBar_visable_16JHY > div > div > div > div:nth-child(8) > div > i').click()
driver.save_screenshot('下拉框.png')
driver.find_element(By.CSS_SELECTOR, '#app > div.woo-box-flex.woo-box-column.Frame_wrap_3g67Q > div.woo-box-flex'
                                     '.Frame_content_3XrxZ.Frame_noside1_3M1rh > div.Frame_main_3Z_V0 > main > div '
                                     '> div > div.SecBar_visable_16JHY > div > div > div > div:nth-child(8) > div > i').click()
# 测试登录按钮
driver.maximize_window()  # 放大屏幕
driver.find_element(By.XPATH, '//*[@id="__sidebar"]/div/div[2]/div[1]/div/button').click()
# 断言登录框成功打开
sleep(2)
title = driver.find_element(By.CLASS_NAME, 'LoginPop_t1_2fuX8').text
assert title == '请选择如下方式登录微博'
# 等待登录页面
WebDriverWait(driver, 1000).until(
    EC.presence_of_element_located((By.XPATH, '//*[@id="app"]/div[2]/div[2]/div[1]/div/div/div/div/a[3]/div/span'))
)
sleep(6)  # 个人页面
driver.save_screenshot('个人页面.png')
# 测试搜索框输入框
driver.find_element(By.CLASS_NAME, 'Form_input_2gtXx').send_keys('20215120808')
# 测试快捷键表情
sleep(1)
driver.find_element(By.XPATH, '//*[@id="homeWrap"]/div[1]/div/div[4]/div/div[1]/div/div[1]').click()
# 测试快捷键话题
sleep(1)
driver.find_element(By.XPATH, '//*[@id="homeWrap"]/div[1]/div/div[4]/div/div[1]/div/div[4]/div').click()
# 测试仅自己可见
sleep(1)
driver.find_element(By.XPATH, '//*[@id="homeWrap"]/div[1]/div/div[4]/div/div[3]/span/div').click()
driver.find_element(By.XPATH, '//*[@id="homeWrap"]/div[1]/div/div[4]/div/div[3]/div/div/div[4]').click()
# 测试发布
driver.find_element(By.XPATH, '//*[@id="homeWrap"]/div[1]/div/div[4]/div/div[4]/button').click()
driver.save_screenshot('发布.png')


目录
相关文章
|
1天前
|
运维 安全 应用服务中间件
自动化运维的利器:Ansible入门与实战网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【8月更文挑战第30天】在当今快速发展的IT时代,自动化运维已成为提升效率、减少错误的关键。本文将介绍Ansible,一种流行的自动化运维工具,通过简单易懂的语言和实际案例,带领读者从零开始掌握Ansible的使用。我们将一起探索如何利用Ansible简化日常的运维任务,实现快速部署和管理服务器,以及如何处理常见问题。无论你是运维新手还是希望提高工作效率的资深人士,这篇文章都将为你开启自动化运维的新篇章。
|
1天前
|
数据采集 运维 Devops
探索Python编程之美:从基础到进阶自动化运维的变革之路:从脚本到DevOps
【8月更文挑战第30天】在数字化时代的浪潮中,编程已经成为一门重要的技能。Python以其简洁明了的语法和强大的功能,成为了许多初学者的首选编程语言。本文将通过浅显易懂的语言,带领读者从Python的基础语法出发,逐步深入到面向对象编程、网络爬虫开发以及数据分析等高级应用,旨在帮助初学者构建扎实的编程基础,并激发他们进一步探索编程世界的热情。文章不仅分享实用的编程技巧,还将探讨如何将编程知识应用于解决实际问题,以期培养读者的问题解决能力和创新思维。
|
2天前
|
运维 监控 调度
自动化运维:使用Python脚本简化日常任务
【8月更文挑战第30天】本文通过介绍如何使用Python脚本来简化和自动化日常的运维任务,旨在帮助读者提升工作效率。文章将重点介绍如何使用Python的基本库以及如何创建简单的脚本来处理文件、监控服务器状态和自动化备份过程。我们将从基础开始,逐步深入到更复杂的应用场景,使读者能够根据实际需要编写自己的自动化脚本。
|
2天前
|
人工智能 中间件 算法框架/工具
Python在工业自动化领域的应用详解
Python在工业自动化领域的应用详解
|
1天前
|
前端开发 JavaScript Java
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
本文介绍了一个结合SpringBoot和Python的实用功能,旨在监控iPhone 15的库存状态并通过邮件提醒用户。系统采用SpringBoot监听苹果官网API,解析JSON数据判断是否有货,并展示最近的库存记录。此外,还能自动触发Selenium+Python脚本实现自动化购买。文中详细介绍了技术栈、接口分析、邮件配置及自动化脚本的设置方法。该项目不仅适用于熟悉后端开发的人员,也适合回顾Layui和Jquery等前端技术。
9 0
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
|
2天前
|
数据采集 缓存 JavaScript
​DrissionPage,Python浏览器自动化又一神器~
​DrissionPage,Python浏览器自动化又一神器~
|
1天前
|
运维 监控 安全
自动化运维:使用Python脚本简化日常任务
【8月更文挑战第30天】在数字化时代,运维工作的效率至关重要。本文将介绍如何通过编写Python脚本来自动化常见的运维任务,从而提升工作效率并减少人为错误。我们将从基础的系统管理任务着手,逐步深入到复杂的自动化流程,展示Python在运维自动化中的应用价值。
|
2天前
|
存储 数据挖掘 数据库
探索Python编程:从基础到高级探索移动应用开发之旅:从概念到实现
【8月更文挑战第29天】本文将带你进入Python的世界,无论你是初学者还是有一定经验的开发者。我们将从Python的基础知识开始,然后逐步深入到更复杂的主题。你将学习到如何编写清晰、高效的代码,以及如何使用Python进行数据分析和网络编程。最后,我们将介绍一些高级主题,如装饰器和生成器。让我们一起开始这段旅程吧!
|
1天前
|
存储 Kubernetes Cloud Native
探索Python编程的奥秘云原生时代的容器编排:Kubernetes入门与实践
【8月更文挑战第30天】本文以浅显易懂的方式,探讨了Python编程的核心概念和技巧。从基础语法到高级特性,再到实际应用案例,逐步引导读者深入理解Python编程的精髓。通过本文的学习,读者将能够掌握Python编程的基本技能,并激发进一步探索的兴趣。
19 13
|
1天前
|
运维 Kubernetes Cloud Native
云原生之旅:Kubernetes 集群的搭建与实践Python 编程入门:从零基础到编写实用脚本
【8月更文挑战第30天】在数字化转型的大潮中,云原生技术以其弹性、可扩展性及高效运维能力成为企业IT架构升级的关键。本文将通过实际操作演示如何在本地环境搭建一个简易的Kubernetes集群,带你领略云原生的魅力所在。从集群规划到服务部署,每一步都是对云原生理念的深刻理解和应用。让我们共同探索,如何通过Kubernetes集群的搭建和运维,提升业务灵活性和创新能力。
下一篇
云函数