【软件测试大赛Web应用省赛】跳坑记录

2024-06-19 11:58

本文主要是介绍【软件测试大赛Web应用省赛】跳坑记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【软件测试大赛Web应用省赛】跳坑记录

本文写在预赛通过的基础上,默认后来者已经接触过web应用测试,并有一定的基础知识。
本文写于2020.11.8省赛结束,希望这些坑以后不会再有人跳进去。

【前排提示】没学过前端因为懒 ,所以有关网页的术语可能使用有误,烦请理性讨论_(:з)∠)_有错的地方可以在评论区指出~

1.frame的切换

今年的省赛功能测试题目是登录网易云进行操作(前两步操作如下图)

题目截图
第一步点击“歌手”,没有问题,直接复制xpath然后click就行。

问题在第二步,进入到歌手页面,发现无论怎么复制“华语女歌手”的xpath,甚至是页面上其他地方的xpath,都无法进行点击操作,会提示你“not such element”。这是为什么呢?我们来看一下网页结构:

左边红框是题目要求定位的元素,右下红框是元素的a标签
怕看不清,截一张放大的网页代码

右上的红框表示,题目要求的元素包含在一个名字叫做“contentFrame”的iframe里面,这就是我们无法进行点击操作的原因。简单来说,网页的自动化操作是有空间限制的。我们第一步点进“歌手”页面的这步操作,“歌手”元素所在的空间是默认frame;而第二步点击“华语女歌手”,它所在的空间是另外一个iframe,我们需要通过语句来进入这个iframe才能进行自动化操作:

driver.switchTo().frame("contentFrame");//进入iframe
driver.switchTo().defaultContent();//返回默认frame

类比一下,上面的操作就像我们用命令提示符的时候,如果现在的工作目录是D盘,而你现在想删除C盘根目录的某个文件(这里假如它叫233.txt好了),那么直接 del 233.txt 是行不通的,要先把工作目录转换到C盘根目录,再 del 233.txt

要注意,题目之后的操作要求中,有的元素在iframe里面,有的在默认frame里面,要根据情况使用上面的语句来切换工作frame。

2.变化的xpath

先来看一下题目的第三步操作要求:
题目第三步
这个所谓的“添加到播放列表”的xpath复制出来是这样的:

driver.findElement(By.xpath("//*[@id=\"2287551604833444877\"]/td[3]/div/a")).click();

你会发现无法进行点击,显示“not such element”。更绝望的是,你每次复制出来的xpath都不一样。这是因为网抑云的这个按钮,在采用复制相对xpath的时候,复制出来的是包含时间戳的xpath(就是代码中“id=\”后面那一串数字),这个时候我们就不能用这个xpath了(毕竟每时每刻都不同),我们要采用绝对xpath,或者说full xpath
一般用的是copy xpath,这里要copy full xpath
我们复制出来的绝对xpath长这样:

driver.findElement(By.xpath("/html/body/div[3]/div[1]/div/div/div[3]/div[2]/div/div/div/div[1]/table/tbody/tr[3]/td[3]/div/a")).click();

平常的时候用相对就行,因为绝对太长了()

3.(此条不确定是否为得分点)用文字定位元素

有一步操作是这样的:

这时候可以直接

driver.findElement(By.linkText("模特")).click();

由于时间仓促,没有测试这步操作是否正确得分,仅供参考。

今年主要是没想到用iframe,浪费了大概两个小时(而且之前也没有很多web应用测试的文章),希望这篇文章能为后来者提供一定的帮助。

随意转载
大概没人会转载吧(

这篇关于【软件测试大赛Web应用省赛】跳坑记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074961

相关文章

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat