Web自动化测试,页面多样化操作?

2023-11-12

目录

1.页面截图操作

1.1截取当前页面

1.2.1driver.save_screenshot(filename/full_path)

1.2.2driver.get_screenshot_as_file(完整的路径/文件名)

1.2.3driver.get_screenshot_as_png()

1.2.4driver.get_screenshot_as_base64()

1.2截取整个页面(长截图)

2.页面元素属性增删改查方法

3.下拉滚动条方法

3.1滑动至页面底部

3.2滑动至顶部

3.3滑动至具体位置

3.4滑动至目标元素可见

4.窗口及 Frame 切换方法

4.1frame简介

4.2窗口切换

1.页面截图操作

1.1截取当前页面

1.2.1driver.save_screenshot(filename/full_path)

from selenium import webdriver
#  定义一个驱动的对象
driver=webdriver.Chrome()
#  打开需要测试的页面
driver.get("https://www.baidu.com")
#  截屏 
driver.save_screenshot('sanmu.png')

1.2.2driver.get_screenshot_as_file(完整的路径/文件名)

#  打开需要测试的网页
driver.get('http://news.baidu.com/')
#  截屏
driver.get_screenshot_as_file('sanmu.png')

1.2.3driver.get_screenshot_as_png()

返回二进制数据流,然后通过文件读写的方式去保存数据。

#  打开需要测试的页面
driver.get("https://www.baidu.com")
# 截屏
data=driver.get_screenshot_as_png()
#  通过文件读写形式,把数据存储到本地
with open('sanmu.jpg','wb') as file:
    file.write(data)

1.2.4driver.get_screenshot_as_base64()

返回base64编码格式的数据,然后通过文件读写的形式存储解码后的数据,完成截屏。

#  打开需要测试的页面
driver.get("https://www.baidu.com")
#  通过driver.get_screenshot_as_base64()方法获取屏幕的base64编码格式的数据
base64_data=driver.get_screenshot_as_base64()
#  对数据解码
image_data=base64.b64decode(base64_data)
#  通过文件读写的形式,保存解码后的数据
with open('sanmu.jpg','wb') as file:
    file.write(image_data)

1.2截取整个页面(长截图)

可执行JavaScript 脚本,将页面的滚动条拖到页面底部,然后再拖回顶部,最后截图。

from selenium import webdriver
import time

#take_screenshot封装
def take_screenshot(url, save_fn="sanmu.png"):
    driver = webdriver.Chrome() 
    driver.set_window_size(1200, 900)
    driver.get(url) 
    browser.execute_script("""
        (function () {
            var y = 0;
            var step = 100;
            window.scroll(0,0);

         function f() {
            if (y < document.body.scrollHeight) {
                y += step;
                window.scroll(0, y);
                setTimeout(f, 100);
            } else {
                window.scroll(0, 0);
                document.title += "scroll-done";
            }
        }

        setTimeout(f, 1000);
    })();
""")

for i in xrange(30):
    if "scroll-done" in browser.title:
        break
    time.sleep(10)

driver.save_screenshot(save_fn)
driver.close()


if __name__ == "__main__":

take_screenshot("http://baidu.com")

2.页面元素属性增删改查方法

#新增属性
driver.execute_script(“arguments[0].%s=arguments[1]” %attributeName,elementObj, value)
#删除属性
driver.execute_script(“arguments[0].removeAttribute(arguments[1])”,elementObj,attributeName)
#修改属性
driver.execute_script(“arguments[0].setAttribute(arguments[1],arguments[2])”, elementObj, attributeName, value)
#获取属性
elementObj.get_attribute(attributeName)

3.下拉滚动条方法

3.1滑动至页面底部

js="window.scrollTo(0,document.body.scrollHeight)" 
driver.execute_script(js)

3.2滑动至顶部

js="window.scrollTo(0,-document.body.scrollHeight)" 
driver.execute_script(js)

3.3滑动至具体位置

window.scrollBy(0,-500) # 向上滚动500个像素
window.scrollBy(0,500)   # 向下滑动500个像素
window.scrollBy(-500,0) # 向左滚动500个像素
window.scrollBy(500,0)   # 向右滑动500个像素
driver.execute_script("window.scrollTo(x,y)")  # 滑动到具体位置(坐标)

3.4滑动至目标元素可见

driver.execute_script("arguments[0].scrollIntoView(true);", element)  # 向下滚动至元素可见
driver.execute_script("arguments[0].scrollIntoView(false);",element)  # 向上滚动至元素可见

4.窗口及 Frame 切换方法

4.1frame简介

     frame 元素在html语法中,其内部会包含一个被嵌入的另一份html文档。当使用selenium打开一个网页,操作范围缺省当前的 html , 并不包含被嵌入的html文档里面的内容。

     如果要操作被嵌入的html文档中的元素,须切换操作范围到被嵌入的文档中。

driver.switch_to.frame(frame_reference)#切换
driver.switch_to.default_content()#切回原html页面

4.2窗口切换

     在网页上操作,点击一个链接或者按钮,会打开新窗口, 需要切换窗口对当前窗口元素定位。

#简单切换
handles = driver.window_handles
driver.switch_to.window(handles[1])#开始访问的是句柄0,第二个页面是1
#循环遍历确定
for handle in driver.window_handles:
    # 先切换到该窗口
    wb.switch_to.window(handle)
    # 得到该窗口的标题栏字符串,判断是不是要操作的窗口
    if '窗口标题' in driver.title:
        # 如果是,那么WebDriver对象就是对应的该窗口,跳出循环
        break

如果要跳回原来页面: 

#变量保存当前窗口的句柄
mainWindow = driver.current_window_handle
#切换到初始窗口
driv.switch_to.window(mainWindow)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web自动化测试,页面多样化操作? 的相关文章

随机推荐

  • 超级卡哇伊的登录框

    css margin 0 padding 0 box sizing border box a color 6a6a6a text decoration none body background color 96c6e2 box displa
  • multi-view clustering指标

    几种 multi view clustering 的指标代码 介绍见 1 3 4 6 有实现 Matching Assignment 由于聚类没有类顺序 而有些指标用到 ground truth labels 如 accuracy 等分类指
  • 操作系统识别

    1 操作系统指纹 操作系统的识别有很多方法 大多跟TCP IP协议有关 操作系统对TCP IP的实现 都是严格遵循RFC标准的 问题RFC标准仅描述了TCP IP的基本要求 并没有对所有内容形成统一的行业标准 于是各操作系统厂商在实现了TC
  • Free FTP Clients 客户端:WinSCP 的 3 种版本 (**)

    安装版 便携版 WinSCP Scripting 自动化 字符编码问题 在跨平台进行文件共享时 涉及到字符的编码问题 采用 ftp一般都可以解决乱码问题 而共享网络文件夹一般不能 ftp的一个问题是 当连接中断时 会造成文件的残缺 有些 f
  • Qt目录树实现

    1 View 根据参考资料 4 的说明 可以使用QTreeView或者QListView来显示目录树 2 Model 2 1 文件系统Model 实现一个系统文件目录树模式 可以选择使用QFileSystemModel或者QDirModel
  • java.lang.ClassCastException: cn.hutool.json.JSONObject cannot be cast toXXXX

    java lang ClassCastException cn hutool json JSONObject cannot be cast toXXXX 除了网上常见解决方案以外 也存在另一种可能导致的类型转换异常 例如 当使用JSONUt
  • Python中的条件循环

    1 if条件 1 1 语法规则 if的语法 if confident 条件判断为布尔型 doing thing true时完成的动作 else doing thing false时完成的动作 1 2 示例 if else 图 1 if示例
  • QT程序发布

    用Release版本运行 将生成的exe文件拷贝到一个空文件夹中 找到QT的cmd窗口 在cmd窗口中 用 cd 命令 进入第一步中建立的空文件夹中 运行命令windeployqt exe文件 将程序需要的库文件都导入该文件中 将整个文件夹
  • Python毕业设计基于django的企业人力资源管理系统

    文末获取资源 收藏关注不迷路 文章目录 一 项目介绍 二 主要使用技术 三 研究内容 四 核心代码 五 文章目录 一 项目介绍 在互联网信息技术时代中 企业管理更多的是使用管理系统进行智能化控制 提高单位的核心竞争力 适应快节奏的生产活动
  • 二分查找 binarySearch

    二分查找 binarySearch 基本概念 时间复杂度和空间复杂度 如何取mid Level 1 一般实现 迭代法 递归法 Level 2 First or Last Position of Target Last Position of
  • ue4 VR测量

    1 在tick函数里面构建测量需要的射线 2 在控制器书写测量函数
  • 数据结构和算法的基本概念, 算法复杂度,时间,空间复杂度

    目录 概念 大O时间复杂度表示法 看几个例子 加法规则 乘法规则 例子 算法时间复杂度计算规则 常见算法时间复杂度 O 1 O 1
  • Spring注解@ComponentScan自定义扫描类

    注 ComponentScan是用在配置类上的 配置类用 Configuration标记 Filter定义扫描规则 FilterType ANNOTATION 按照注解 FilterType ASSIGNABLE TYPE 按照给定的类型
  • 串的模式匹配算法(超详细)

    串的模式匹配 1 简单的模式匹配算法 2 KMP算法 3 KMP算法改进 4 时间复杂度比较 1 简单的模式匹配算法 思想 将主串中所有长度为m的子串依次与模式串对比 直到找到一个完全匹配的子串或所有子串都不匹配为止 具体代码展示 1 串的
  • 电机磁链和反电动势系数辨识

    电机磁链和反电势系数关系 电机磁链和反电动势系数辨识 电机dq坐标系下电压方程 u d
  • mysql数据库备份还原及表空间和用户创建

    mysql数据库备份还原 1 本地机器copy文件到一台机器 scp path 路径 file 文件 10 10 10 10 对方机器ip paht 路径 file 文件 如果对方机器ssh的端口不是默认 需要添加端口 scp Pport
  • AD15如何在PCB界面锁定选中元件

    1 进入PCB界面 右下角 PCB PCB Inspector 2 选中你想要锁定的元件 inspector 出现属性 3 将Locked勾选 此时的元件固定在PCB上 无法进行拖动和属性修改
  • 在MATLAB中生成矩阵的三种方法

    在MATLAB中生成矩阵的三种方法 1 直接输入法 2 外部文件读入法 3 特殊矩阵函数生成法 1 直接输入法 1 矩阵所有元素必须在 内 2 矩阵中同行元素以逗号 或空格分隔 3 矩阵中行与行之间用分号 或回车分隔 4 矩阵元素可以是表达
  • SpringBoot如何快速简化部署

    针对于一些不清楚创建Maven项目和创建SpringBoot项目到底什么区别 本文通过创建Maven项目来构建SpringBoot项目 来方便理解两个创建方式的关系 目录 1 创建Maven工程 打jar包 2 导入spring boot相
  • Web自动化测试,页面多样化操作?

    目录 1 页面截图操作 1 1截取当前页面 1 2 1driver save screenshot filename full path 1 2 2driver get screenshot as file 完整的路径 文件名 1 2 3d