Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用Selenium标识相同的Web元素

用Selenium标识相同的Web元素
EN

Stack Overflow用户
提问于 2017-02-02 13:17:06
回答 7查看 1.7K关注 0票数 2

我是一名自动化工程师,我目前正在为一个可持续的网页创建测试用例(我可以在以后运行,但仍然通过)

这里是我的问题:

我试图选择多个网页按钮具有相同的确切类名。现在我可以“选择”这些按钮了,但这些都是可能更改的临时x路径。

对于相同的web元素,我需要唯一的ID(或区分它们的某种方法)。X路径的唯一区别是:

  • HTML格式代码,我可以找到每个按钮,但如果一个按钮被移动,我的测试将失败。
  • HTML代码,它是按钮的类名+n。但是,如果从网页中取出一个按钮,我的测试将再次失败。

//*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[1]/div/a/div //*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[2]/div/a/div //*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[3]/div/a/div

^^上述代码是我当前如何找到每个带有Selenium的按钮的方法。

如果我复制每个类x路径,这就是我得到的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="src-js-components-DateControl-___DateControl__dateControl___2nYAL"><a tabindex="0"><div class="src-js-components-DateControl-___DateControl__icon___2z6Ak null"></div><!-- react-text: 392 -->Set +<!-- /react-text --></a></div>

 <div class="src-js-components-DateControl-___DateControl__dateControl___2nYAL"><a tabindex="0"><div class="src-js-components-DateControl-___DateControl__icon___2z6Ak null"></div><!-- react-text: 386 -->Set +<!-- /react-text --></a></div>

 <div class="src-js-components-DateControl-___DateControl__dateControl___2nYAL"><a tabindex="0"><div class="src-js-components-DateControl-___DateControl__icon___2z6Ak null"></div><!-- react-text: 398 -->Set +<!-- /react-text --></a></div>

我已经和开发团队谈过这个问题,但是他们告诉我,给这些web元素分配唯一的ID是一个很大的禁忌。(当我们投入生产时,与项目的全球化有关),即使他们确实分配了唯一的Id,他们也告诉我,在项目被发送到生产之前,他们必须剥去它们。最终会让我的测试毫无用处..。

现在我来到Stack Overflow寻求帮助,我在网上查到的所有东西都不能给我答案,但是这似乎是QA和开发部门之间的一个有效问题。

是否有一种将Id分配给web元素的方法,以便使用selenium的测试人员能够识别它们,但它不会影响开发人员在整个项目中使用该元素的能力?

编辑:使用我公司使用的框架的,实际上我并没有用selenium编写任何代码。我将Xpath保存到对象中,然后在手动测试中使用预先存在的方法调用该对象。我只能选择要保存在对象中的Xpath。

稍后我会和Dev谈谈,让他们解释大的“不-不”,这样我就可以在你的时间和输入中与所有的you..Thank沟通。

例如,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BirthDateSet= someXpath

Click() using {BirthDateSet}

这里有一些图片可以帮助您看到

EN

回答 7

Stack Overflow用户

发布于 2017-02-02 14:08:12

您可以简化XPath,使其对DOM中可能的更改不那么敏感。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//div[@class="src-js-components-DateControl-___DateControl__icon___2z6Ak null"][N] # Where N is button index

如果类名的这个部分2z6Ak是以二进制方式生成的,请尝试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//div[starts-with(@class, "src-js-components-DateControl-___DateControl__icon___")][N] # Where N is button index
票数 1
EN

Stack Overflow用户

发布于 2017-02-02 15:19:30

使用xpath访问所需按钮的另一种方法是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//*[@id='tenant-details-accordion']/descendant::div[contains(@class, 'DateControl__icon')][1]

上面的xpath应该能够选择第一个出现的按钮。类似地,对于第二个出现的按钮,xpath将变成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//*[@id='tenant-details-accordion']/descendant::div[contains(@class, 'DateControl__icon')][2]

因此,您可以根据页面上所需按钮的出现级别继续替换谓词(2)。

票数 1
EN

Stack Overflow用户

发布于 2017-02-02 21:25:05

编辑:谢谢你的代码。因此,如果您查看您的代码,您可以看到,尽管您所追求的内容具有相似的属性,但是页面中有一些元素可以让您识别您想要的内容。因此,假设您希望在出生日期之后使用SET链接,然后使用://div[contains(text(),'Birth Date')]/div/a/div

因此,要重用这个xpath,只需替换文本String.format("//div[contains(text(),'%s')]/div/a/div", labelName);

旧的:如果您想暂时为元素分配一个属性,我相信您可以通过javascript element.setAttribute()来完成这个任务,您可以通过executeScript()函数来运行它。

按钮上没有短信吗?你是说按钮会互相交换位置吗?或者你不想使用按钮的索引?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42012444

复制
相关文章
ZooKeeper日志配置
ZooKeeper 使用 SLF4J 作为日志的抽象层,默认使用 Log4J 来做实际的日志工作。使用两层日志抽象看起来似乎是多余的。这里简要的说明如何来配置 Log4J,虽然 Log4J 非常灵活且功能强大,但是也有一些复杂,这里只是简要的介绍一下基本的用法。
smartsi
2019/11/26
4.6K0
Deployment滚动更新策略RollingUpdate
当需要升级Deployment中的Pod镜像或者配置时,可以使用滚动更新策略,避免出现服务中断或者数据丢失。滚动更新策略可以让新的Pod在替代旧的Pod之前先完成启动,这样就能保证服务的持续可用性。Kubernetes中Deployment对象提供了两种滚动更新策略:RollingUpdate和Recreate。
玖叁叁
2023/04/29
1.2K0
Deployment滚动更新策略Recreate
Recreate策略是另一种滚动更新策略,它会先删除旧的Pod,然后再创建新的Pod。在进行滚动更新时,所有的Pod都会被同时停止,然后全部替换为新的Pod。Recreate策略的优点是可以避免新旧Pod的共存问题,但会在升级期间中断服务。
玖叁叁
2023/04/29
5260
Log4J.xml配置详解
问题:当引用第三方jar的时候,第三方jar打印了很多不需要的日志。我们应该如何去除。
斯文的程序
2019/11/07
15.8K1
【程序源代码】Log4J 日志分割
“ 关键字:通过log4j实现日志文件按照日期和文件大小进行自动分割保存,实现日志备份和日志文件合理管理。”
程序源代码
2020/04/26
1.4K0
使用log4j配置不同文件输出不同内容
敲代码中很不注意写日志,虽然明白很重要。今天碰到记录日志,需要根据内容分别输出到不同的文件。 参考几篇文章: 感觉最详细:http://blog.csdn.net/azheng270/article/details/2173430/ 喜欢博客园的日志风格,第一篇参考文章就是它:http://www.cnblogs.com/alipayhutu/archive/2012/06/21/2558249.html 写好的模板,直接修改就可以,虽然不满足我的需求:http://blog.csdn.net/rsun1/
Ryan-Miao
2018/03/13
3K0
使用log4j配置不同文件输出不同内容
springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置
日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;
noteless
2018/09/11
8680
RollingFileAppender选项及相应配置
Layout用来规定日志是以什么样的格式输出,需要输出哪些信息。Layout提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。 常见的Layout如下:
用户7718188
2021/10/08
1.8K0
log4j介绍以及使用教程
  Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接 口服务 器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。    Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。
阿豪聊干货
2018/08/09
5770
Log4j 学习笔记(四)log4j的配置文件
此节分享xml形式的log4j.properties。 1. 将日志输出到控制台 log4j.xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP
青山师
2023/05/04
6370
log4j配置文件模版
   log4j.properties {.brush:xml;toolbar: .true; .auto-links: .false;} log4j.rootLogger=DEBUG, INFO, ERROR # 输出控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold=INFO log4j.appender.CONSOLE.Target=System.out log4j.a
明哥的运维笔记
2019/01/30
2.7K0
Log4j 入门教程
Log4J 是 Apache 的一个开源项目,通过在项目中使用 Log4J,我们可以控制日志信息输出到控制台、文件、GUI 组件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。
Remember_Ray
2020/08/03
5250
kafka log4j日志级别修改,一天生成一个日志文件
这有什么问题呢,虽然说我们用一天一次的滚动日志,但是我们配置的DataPattern为小时级别的,所以只要每个小时有日志生成,那么每个小时都会生成日志,简单来说就是一个小时一个。
从大数据到人工智能
2022/01/19
8380
log4j.xml示例_log4j.xml示例配置
We can configure log4j using both property file as well as xml file. Today we will look into log4j.xml example and get the details of log4j.xml configuration.
用户7886150
2020/11/18
1.2K0
Java日志框架学习--上
每一种日志框架都有自己单独的API,要使用对应的框架就要使用对应的API,这就大大的增加了应用程序代码对于日志框架的耦合性。
大忽悠爱学习
2022/05/15
4770
Java日志框架学习--上
Java日志框架学习--JUL和Log4j--上
每一种日志框架都有自己单独的API,要使用对应的框架就要使用对应的API,这就大大的增加了应用程序代码对于日志框架的耦合性。
大忽悠爱学习
2022/11/30
6870
Java日志框架学习--JUL和Log4j--上
Log4j.properties配置文件详解「建议收藏」
Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。
全栈程序员站长
2022/11/11
16.9K0
spark stream配置log输出
在cluster模式下,spark-submit添加如下参数。两个--conf分别为driver和executor设置log4j的配置文件,--files将文件上传到集群
平凡的学生族
2020/06/23
1.9K0
log4j2配置文件properties配置_log4j2 配置详解
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是properties(key=value)文件,其中properties格式的配置文件最为常用,其有一个固定的文件名log4j.properties,下面我们介绍使用properties文件做为配置文件的方法:
全栈程序员站长
2022/11/11
4.2K0
细说log4j
可能做过java项目的基本上都是用过log4j,它是用来做java日志的。比如我们做一个项目分为很多的模块,那我们怎么想要知道它什么时候启动了,这时候我们可以使用log4j标记某某模块启动了。 努力的人绝对不会成为落后的标兵,加油!废话不多说,进入log4j。 一、log4j简介 1.1、log4j概述   log for java(java日志)   Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器
用户1195962
2018/01/18
1.7K0
细说log4j

相似问题

RollingFileAppender - log4j,MaxBackUpIndex未生效

126

在DailyRollingFileAppender -log4j中使用MaxBackupIndex

10

Log4j和Logback FileAppender maxFileSize和maxBackupIndex

12

Log4j在使用RollingFileAppender、maxsize、maxbackupindex和close时发出

10

默认log4j策略

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文