当前位置: 首页 > news >正文

软件测试 selenium

selenium基础

selenium是什么

自动化web浏览器的工具

selenium IDE

是selenium脚本的集成开发环境,允许记录和调试测试

selenium webDriver优于selenium RC的优点?

selenium使用

selenium操作浏览器

初始项目

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service# 设置启动浏览器对象
def startChrome():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1 = webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
driver = statchrome()
driver.get('https://www.baidu.com')
driver.close()
# 关闭浏览器
driver.quite()

import timefrom selenium import webdriver# 启动Chrome浏览器
driver = webdriver.Chrome()# 打开一个网页
driver.get("https://www.baidu.com")# 获取当前页面的标题
print(driver.title)# 获取当前页面的URL
print(driver.current_url)# 最大化浏览器窗口
driver.maximize_window()# 最小化浏览器窗口
driver.minimize_window()# 设置浏览器窗口大小
driver.set_window_size(800, 600)time.sleep(5)
# 关闭浏览器
driver.quit()

浏览器控制

# 获取当前页面的标题
print(driver.title)# 获取当前页面的URL
print(driver.current_url)# 最大化浏览器窗口
driver.maximize_window()# 最小化浏览器窗口
driver.minimize_window()# 设置浏览器窗口大小
driver.set_window_size(800, 600)# 关闭浏览器
driver.quit()

定位元素

# 八种定位元素方式
# id,name,class_name,tag_name,link_text,xpath,css_selector,partial_link_text# 通过id定位元素
# 1.一般比较准确,可以通过控制台查找
# 2.并不是所有网页或元素都有id值
element = driver.find_element("id", "element_id")# 通过name定位元素
element = driver.find_element("name", "element_name")# 通过class_name定位元素
# 1.class值不能有空格,会报错
# 2.class值重复比较多,需要进行切片
# 3. class值部分网站是随机的
# a.find_element(By.CLASS_NAME,value='s_ipt').send_keys('defalt')
element = driver.find_element("class name", "element_class")# 通过tag_name定位元素
# 基本没有唯一元素
# 重复多,也需要切片
element = driver.find_element("tag name", "div")# 通过link_text定位元素
element = driver.find_element("link text", "Example Link")# 通过partial_link_text定位元素
# 模糊链接文本
element = driver.find_element("partial link text", "Example")# 通过xpath定位元素
# 1.xpath是路径,定位到元素
# 2.xpath是唯一的,定位到唯一的元素
# 3.xpath是动态的,定位到动态的元素
# 通过属性定位到路径
element = driver.find_element("xpath", "//div[@class='example-class']")
# 元素定位-LINK-TEXT
# 默认搜索a标签
# 通过精准链接文本找到标签a的元素
# a.find_element(By.LINK_TEXT,value='新闻').Click()# 通过css_selector定位元素
# 样式选择器,多功能定位
# a.find_element(By.CSS_SELECTOR,value='.s_ipt').send_keys('defalt')
# 不加修饰符 = 标签头 通过标签头定位
# 4,通过任意类型定位:"[类型='精准值']"
# 4,通过任意类型定位:"[类型*='模糊值']"
# 4,通过任意类型定位:"[类型^='开头值']”
# 4,通过任意类型定位:"「类型$'结尾值'1"
element = driver.find_element("css selector", "div.example-class")

元素信息操作

鼠标和键盘操作

# 鼠标悬停
element = driver.find_element(By.ID, "hover_element")
ActionChains(driver).move_to_element(element).perform()# 鼠标右键
ActionChains(driver).context_click(element).perform()# 鼠标双击
ActionChains(driver).double_click(element).perform()# 按住鼠标左键拖动
source = driver.find_element(By.ID, "source_element")
target = driver.find_element(By.ID, "target_element")
ActionChains(driver).drag_and_drop(source, target).perform()# 键盘操作:输入文本
input_element = driver.find_element(By.ID, "input_element")
input_element.send_keys("Hello, Selenium!")# 键盘操作:按下并释放键
input_element.send_keys(Keys.CONTROL, 'a')  # 全选
input_element.send_keys(Keys.CONTROL, 'c')  # 复制
input_element.send_keys(Keys.CONTROL, 'v')  # 粘贴

鼠标操作

元素等待

显示等待和隐式等待

隐式等待:对所有元素查找操作设置最大等待时间。等待时间设置的一个最大值,超时未出现的话会报错。简单等待,元素出现就可以继续。

显示等待:已知具体的等待条件,可以设置等待某个条件,比如设置等待某个元素可以点击等等。适合用在复杂场景。

给定时间找到元素执行执行后续操作;没有找到报错

# 隐式等待:对所有元素查找操作设置最大等待时间
driver.implicitly_wait(10)  # 单位为秒# 显式等待:等待某个特定条件成立
try:element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "dynamic_element")))print("Element found")
except:print("Element not found")

下拉选择框、弹出框、滚动条操作

下拉选择框

# 定位下拉选择框
dropdown = driver.find_element(By.ID, "dropdown_element")# 使用Select类操作下拉选择框
select = Select(dropdown)# 通过索引选择选项
select.select_by_index(1)# 通过值选择选项
select.select_by_value("option_value")# 通过可见文本选择选项
select.select_by_visible_text("Option Text")

弹出框

Selenium可以处理JavaScript弹出框,如alertconfirmprompt

# 触发弹出框
driver.find_element(By.ID, "alert_button").click()# 切换到弹出框
alert = driver.switch_to.alert# 获取弹出框文本
print(alert.text)# 点击“确定”按钮
alert.accept()# 点击“取消”按钮(仅对confirm和prompt有效)
# alert.dismiss()# 输入文本(仅对prompt有效)
# alert.send_keys("Hello, Selenium!")

滚动条

# 滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")# 滚动到页面顶部
driver.execute_script("window.scrollTo(0, 0);")# 滚动到指定元素位置
element = driver.find_element(By.ID, "target_element")
driver.execute_script("arguments[0].scrollIntoView();", element)

1,在HTML页面中,由于前端技术框架的原因,页面元素为动态显示,元素根据滚动条的下拉而被加载

2.页面注册同意条款,需要滚动条到最底层,才能点击同意

通过js代码来操作滚动条

frame切换、多窗口切换

# 切换到iframe
iframe = driver.find_element(By.ID, "iframe_element")
driver.switch_to.frame(iframe)# 操作iframe中的元素
element = driver.find_element(By.ID, "iframe_element_inside")
element.click()# 切换回主文档
driver.switch_to.default_content()

多窗口切换

# 打开一个新的窗口
driver.execute_script("window.open('https://www.google.com');")# 获取所有窗口句柄
windows = driver.window_handles
# ->获取当前窗口句柄
driver.current_window_handle# 切换到新窗口
driver.switch_to.window(windows[1])
print(driver.current_url)  # 输出新窗口的URL# 切换回主窗口
driver.switch_to.window(windows[0])
print(driver.current_url)  # 输出主窗口的URL

窗口截图、验证码处理

# 对整个页面截图
driver.save_screenshot("screenshot.png")# 对特定元素截图
element = driver.find_element(By.ID, "target_element")
element.screenshot("element_screenshot.png")

验证码处理

# 定位验证码输入框
captcha_input = driver.find_element(By.ID, "captcha_input")# 手动输入验证码
captcha_code = input("请输入验证码:")
captcha_input.send_keys(captcha_code)# 提交表单
driver.find_element(By.ID, "submit_button").click()

cookie

自动化测试

自动化测试原理

自动化框架构建

框架:页面库,数据驱动,测试脚本,测试报告,持续集成

页面对象库对自动化包括工具(selenium,appium)API的二次封装,还有使用二次封装后的自动化工具类的页面元素封装

数据驱动:测试脚本中使用的数据文件以及读取方法类

测试脚本:主要通过pytest测试框架进行编写,选择其原因主要支持assert断言,适合复杂度功能测试,执行过程可以自定义用例执行顺序和跳过以及预期,支持重复执行,并兼容unittest编写的测试用例。

测试报告:通过pytest自动生成的allure报告,也可以集成在jenkins重

持续集成:jekins实现,目的在于测试脚本无人值守执行以及自动生成测试报告。方便测试人员能够省出时间进行更多的功能测试和探索性测试。

如何设计自动化测试用例

编写测试脚本之前要编写测试用例,测试用例不能直接使用手工测试点用例;

自动化的测试用例是一个完整的场景。用户登录系统到用户退出。
用例之验证一个功能点。不用试图登陆后验证所有的功能在退出
测试用例尽量只做正向的逻辑验证。
用例之间不要产生关联,相互独立,也要高内聚,低耦合
测试用例关注的是功能逻辑的实现,字段无关
测试用例的上下文必须有一定的顺序性,前置条件清晰
检查点的设置要侧重,全面,灵活
测试用例对数据的操作要进行还原
测试用例必须是可回归的
用例选择遵循成本始终,构建场景,目的冒烟回归,繁琐功能,主体流程

webdriver如何开启和退出一个浏览器?

开启:dr=webdriver.浏览器类型()关闭:dr.quit()

自动化测试框架

Selenium Hub

selenium server是使用单个服务器作为测试节点的一个独立的应用程序,selenium hub代理一个或者多个selenium节点的示例,一个hub和多个node被称为selenium grid。运行seleniumServer在同一个主机上用一个hub和单个节点创建de selenium grid类似

selenium连接到数据库

如何验证多个页面存在同一个对象

XPath中使用单斜杠和双斜杠有什么区别?

自动化测试细节

如何在页面加载成功后验证元素的存在?

Selenium Grid的了解

使用计算机基础架构大幅加速web应用程序功能测试的工具,允许测试者轻松在多台机器上并行运行多个测试,并可以在异构环境中运行。

集成显示了所有selenium远程控制,不必担心实际的基础设施,selenium Grid将运行selenium测试套件所需的时间,缩短到selenium实例的单个实例运行时间的一小点。

Selenium中有娜些验证点?

Selenium主要有三种验证点:
检查页面标题
检查某些文字
检查某些元素(文本框,下拉菜单,表等)

XPath使用,什么时候在selenium中使用Xpath?

CSS定位器策略?

多个定位器选择

如果有唯一的名称或标识符可用,那么应该使用它们来代替XPath和CSS定位器。如果没有,那么CSS定位器应该被优先考虑,因为在大多数现代浏览器中,它们的评估速度比XPth更快。

窗口弹出机制控制

可以使用命令getWindowHandles(()来处理多个弹出窗口。
然后将所有窗口名称存储到St变量中并将其转换为数组。
接下来,通过使用数组索引,导航到特定的窗口。
driver.switchTo().window(Arraylndex);

隐式等待与显式等待有什么不同?

如何处理Selenium WebDriver中的警报/弹出窗口?

Selenium WebDriver中的可用定位器是什么?

其它

大致分类和比较TDD/BDD和DDD框架?

数据驱动架构和关键字驱动框架

数字驱动框架:

测试用例逻辑驻留在测试脚本中。测试数据分离保存在测试脚本之外,测试数据是从外部文件中读取,并加载到测试脚本中的变量中。变量用于输入值和验证之

关键字驱动:

关键字/表驱动框架需要开发数据表和关键字。独立于执行它们的测试自动化工具。可以使用或不适用应用程序来设计测试。关键字驱动的测试中,被测试的应用程序的功能记录在一个表格中,以及每个测试的分布说明。

http://www.lqws.cn/news/564805.html

相关文章:

  • 【innovus基础】- 如何手动画线?
  • 【技术追踪】CLAIM:临床导向的 LGE 增强技术用于实现真实且多样化的心肌瘢痕合成与分割
  • 基于云的平板挠度模拟:动画与建模-AI云计算数值分析和代码验证
  • 青少年编程与数学 02-022 专业应用软件简介 01 设计与创意类软件:Adobe Creative Cloud
  • Wpf布局之UniformGrid面板!
  • MCP 中间件机制正式发布:FastMCP 的「责任链」进化
  • rollupOptions 详细讲解,如何优化性能
  • ali PaddleNLP docker
  • MATLAB GUI界面设计 第七章——高级应用
  • 机器学习8——神经网络下
  • 手机流量监控App(GlassWire)使用指南
  • WPF两种绑定方式的分析
  • ACE之ACE_Dev_Poll_Reactor
  • 高性能 List 转 Map 解决方案(10,000 元素)
  • 阿里云-接入SLS日志
  • HarmonyOS NEXT仓颉开发语言实战案例:健身App
  • HarmonyOS NEXT仓颉开发语言实战案例:小而美的旅行App
  • [分布式并行] 流水线并行 PP(NaivePP/GPipe/F-then-B/PipeDream/1F1B)
  • MCPA2APPT 智能化演示文稿系统:A2A、MCP、ADK 三大架构全流程自动化
  • 区块链技术: 稳定币USDC的工作原理
  • 【八股消消乐】消息队列优化—消息丢失
  • python pyecharts 数据分析及可视化(2)
  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(三)- 职位数据统计分析
  • MAC 地址在 TCP 网络中的全面解析:从基础概念到高级应用
  • 【Redis原理】Redis事务与线程模型
  • StarRocks 3.5 新特性解读:Snapshot 快照恢复、大导入性能全面升级、分区管理更智能
  • opensuse/debian grub启动界面太模糊?
  • Wpf布局之WrapPanel面板!
  • 3.1.1、CAN总线单个设备环回测试
  • Git常见使用