技术标签: python 自动化测试 软件测试 自动化 Python 开发语言
感兴趣可看:软件测试专栏
自动化测试学习部分源码
python自动化测试相关知识:
【如何学习Python自动化测试】—— 自动化测试环境搭建
【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver
【如何学习Python自动化测试】—— 页面元素定位
【如何学习Python自动化测试】—— 时间等待
【如何学习Python自动化测试】—— 浏览器操作
【如何学习Python自动化测试】—— 鼠标键盘操作
【如何学习Python自动化测试】—— 多层窗口定位
【如何学习Python自动化测试】—— 警告框处理
【如何学习Python自动化测试】—— Cookie 处理
【如何学习Python自动化测试】—— expected_conditions
【如何学习Python自动化测试】—— Python 的 unittest 框架
【如何学习Python自动化测试】—— HTMLTestRunner 生成测试报告
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进行测试的步骤:
(1)到“百度翻译”网页 (https://fanyi.baidu.com/)查看要测试的页面。
(2)确定要测试的UI元素目标。
测试的内容需要注意的是:
这些测试内容应该在多种情况下进行测试,如输入不同长度的文本、输入不同语言的文本等,以保证测试的全面性和准确性。
(3)编写脚本,定位测试目标元素,并对元素进行对应的测试操作。
代码截图:
运行结果:
打开百度翻译页面截图
选择翻译和被翻译的语言截图
转换翻与被翻语言截图
断言提示语截图
断言翻译结果为“自动化实验”截图
翻译记录截图
(1)访问“新浪微博”网页 ,(https://weibo.com/)。
登录个人账号后,出现个人页面。
(2)确定要测试的UI元素目标。
新浪微博的首页:
新浪微博的个人页面:
测试的内容需要注意的是:
这些测试内容应该在多种情况下进行测试,如输入不同长度的文本、输入不同类型的文本等,以保证测试的全面性和准确性。同时需要注意测试过程中的网络和页面加载速度等因素,以保证测试的稳定性和准确性
(3)编写脚本,定位测试目标元素,并对元素进行对应的测试操作。
代码截图:
运行结果:
搜索结果.png
下拉框.png
登录个人页面.png
发布.png
发布完成截图
Message: element not interactable
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
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()
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.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态
文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境
文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn
文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker
文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机
文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk
文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入
文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。 Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。
文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动
文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计
文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;gt;Jni-&amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图
文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法