IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Selenium常用实战功能指南 -> 正文阅读

[开发测试]Selenium常用实战功能指南

自动化前言

  1. 什么项目适合做自动化?
  • 软件需求变更不频繁
  • 项目周期长
  • 自动化脚本可重复利用
  1. 自动化测试的介入点:
  • 系统测试
  1. 自动化测试项目实施过程
  • 可行性分析,框架选择,需求分析,计划,测试用例设计,无人值守,提交报告,脚本维护。

元素定位的几种方法

id定位

from selenium.webdriver.common.by import BY

elem=driver.find_element(By.ID,"kw")

定位的元素例子:

<a id="kw">哈哈哈<a>

name定位

from selenium.webdriver.common.by import BY

elem=driver.find_element(By.NAME,"kw")

定位的元素例子:

<a name="kw">哈哈哈<a>

link_text定位

from selenium.webdriver.common.by import BY

elem=driver.find_element(By.LINK_TEXT,"新闻")

定位的元素例子:

<a herf="https://www.baidu.com">新闻<a>

partial_link_text定位

from selenium.webdriver.common.by import BY

elem=driver.find_element(By.PARTIAL_LINK_TEXT,"新")

定位的元素例子:
根据部分文本来定位

<a herf="https://www.baidu.com">新闻<a>

xpath定位(重点)

绝对路径:/开头的是相对路径,从第一个标签开始逐步往下找元素叫绝对路径
例子:/html/body/div[2]/div[3]/div/div/ul[2]/li[8]/li/a/div/span
相对路径://开头的是绝对路径,从某个元素开始逐步往下找元素叫相对路径

  • 相对路径+索引

    • //form/span[1]/input (form标签下第2个span标签下的input标签)
  • 相对路径+属性

    • input标签下autocomplete属性为off的标签(//input[@autocomplete=‘off’])
  • 相对路径+通配符

    • //*[@autocomplete=‘off’] (任意标签下autocomplete属性为off的标签)
    • //*[contains(@autocomplete,‘of’)] (任意标签下autocomplete属性包含of的标签)
  • 相对路径+部分属性定位

    • //*[contains(@autocomplete,‘of’)] (任意标签下autocomplete属性包含of的标签)
    • //*[starts-with(@autocomplete,‘of’)] (任意标签下autocomplete属性包含of的标签)
    • //*[substring(@autocomplete,‘of’)] (任意标签下autocomplete属性包含of的标签)
  • 相对路径+文本定位

    • //span[text()=‘文本内容’]

css定位

常见问题

  1. 如果元素定位不到,怎么分析
  • 元素没有加载完成
  • 元素在frame种
  • 元素不可用,不可读,不可见
  • 动态属性,动态div层

前提:需要定位的元素属性必须唯一。

元素操作的常用方法

基本方法

send_keys()

向文本框发送内容

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.send_keys("Selenium")

text

获取标签之间文本值

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
print(elem.text)

get_attribute()

获取标签的属性值

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.get_attribute("value")

maximize_window()

最大化窗口

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()

current_window_handle

返回当前窗口句柄

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
print(driver.current_window_handle)

current_url

返回当前窗口url

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
print(driver.current_url)

is_selected()

判断元素是否被选择

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.is_selected()

is_enable()

判断元素是否可用

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.is_enable()

is_displayed()

判断元素是否在页面中显示

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.is_displayed()

clear()

清除输入框值

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.send_keys("Selenium")
elem.clear()

quit()

关闭浏览器并杀掉chromedriver

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.quit()

title

获取页面title

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
print(driver.title)

refresh()

刷新页面

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.refresh()

back()

退后操作

from selenium import webdriver

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.back()

特殊方法

ActionChains

Selenium中将键盘鼠标操作封装在Action Chains中。
示例:

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


driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
ActionChains(driver).move_to_element(bg_config).perform()
  • click 模拟鼠标单击操作
  • click_and_hold 模拟鼠标单击并按住不放
  • double_click 模拟鼠标双击
  • context_click 模拟鼠标右击
  • drag_and_drop(source,target) 模拟鼠标拖拽
  • drag_and_drop(source, xoffset, yoffset) 将目标拖拽到目标位置
  • key_down(value) 模拟按住某个键,实现快捷操作
  • key_up(value) 模拟松开某个键,一般和key_down操作一起使用
  • move_to_element(to_element) 模拟将鼠标移到指定的某个页面元素
  • move_to_element_with_offset(to_element,x,y) 移动鼠标到指定坐标
  • perform() 将之前一系列Action-Chains执行
  • release() 释放按下的鼠标
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.send_keys(Keys.BACK_SPACE)
ActionChains(driver).move_to_element(bg_config).perform()

Select操作

示例:

from selenium import webdriver
from selenium.webdriver.support.select import Select 


driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
Select(elem).select_by_index(1)
  • select_by_index(n) 根据下标选择

  • select_by_value(value) 根据值选择

  • select_by_visible_text(text) 根据text内容做选择

  • options 获取下拉列表所有选项

  • first_selected_options 返回所有被选中的选项

  • first_selected_option 返回第一个被选中的选项

from selenium import webdriver
from selenium.webdriver.support.select import Select 


driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
options=Select(elem).options
for elem in options:
	print(elem.text)

调用js代码

  • execute_script() 同步执行js
  • execute_async_script() 异步执行js

js实现浏览器滚动条操作

from selenium import webdriver
from selenium.webdriver.support.select import Select 


driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
js="window.scrollTo(100,300)"
driver.execute_script(js)

frame操作

进入frame

  • 根据id定位frame并进入frame,id=login_frame
from selenium import webdriver
from selenium.webdriver.support.select import Select 


driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.switch_to.frame(driver.find_element_by_id("login_frame"))
  • 根据frame的index进入
from selenium import webdriver
from selenium.webdriver.support.select import Select 


driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.switch_to.frame(0)

退出frame

driver.switch_to.default_content()

Cookie操作

  • add_cookie(cookie_dict) 在当前会话中添加cookie信息
  • delete_all_cookie() 删除所有cookie信息
  • delete_cookie(cookie_name) 删除单个名字为cookie_name的cookie信息
  • get_cookie(cookie_name) 返回名为cookie_name 的cookie信息
  • get_cookies() 返回当前会话的所有cookie信息
from selenium import webdriver
from selenium.webdriver.support.select import Select 


driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.add_cookie({"session":"12344322"})

截图操作

屏幕截图

from selenium import webdriver
from selenium.webdriver.support.select import Select 


driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.save_screenshot("q.png")

元素截图

from selenium import webdriver
from selenium.webdriver.support.select import Select 
from PIL import Image

driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
left=elem.locationp['x']
top=elem.locationp['y']
right=left+elem.size['width']
bottom=top+elem.size['height']
im=Image.open("test.png")
im=im.crop((left,top,right,bottom))
im.save('t.png')

多窗口切换

from selenium import webdriver
from selenium.webdriver.support.select import Select 


driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
# 获取所有窗口句柄
handles=driver.window_handles
# 切换到新窗口
driver.switch_to.window(handles[1])

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:14:13  更:2022-07-20 19:14:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 12:11:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码