首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态ID定位元件

动态ID定位元件
EN

Stack Exchange QA用户
提问于 2018-04-10 14:04:00
回答 2查看 7.4K关注 0票数 0

对于自动化,我使用selenium和JAVA。

我遇到了一个绊脚石--我们的开发人员没有将ID分配给元素,JFS为其分配了自己的ID,但是ID是动态的,并且一直在变化。

此外,xpath和css选择器还包含动态id。

我似乎有一些使用包含的方法,首先,但似乎无法得到正确的方法,当我检查我的元素时,我得到了下面的

代码语言:javascript
复制
<button type="button" class="ui-datepicker-trigger ui-button ui-widget ui- 
state-default ui-corner-all ui-button-icon-only" aria-label="Show Calendar" 
aria-haspopup="true" role="button" aria-disabled="false"><span class="ui- 
button-icon-left ui-icon ui-icon-calendar"></span><span class="ui-button- 
text">ui-button</span></button>

 xpath - //[@id="j_idt67:j_idt69:j_idt70:j_idt100:j_idt101:calendar"]/button
 css selector = #j_idt67\3a j_idt69\3a j_idt70\3a j_idt100\3a j_idt101\3a 
calendar > button

如果有人能帮助和建议你如何定位这个元素,并确保它不会改变,这将有很大的帮助,如果你需要更多的信息,让我知道,就像我说的自动化新技术一样。

EN

回答 2

Stack Exchange QA用户

发布于 2018-04-10 19:38:52

假设您的webdriver被称为“驱动程序”,我将使用以下xpath

代码语言:javascript
复制
WebElement button = driver.findElement(By.xpath("//button[@aria-label='Show Calendar']"));

这样做的目的是试图找到一个不会改变的属性,并且在理想情况下是唯一的。"aria-label“似乎是这样一个属性,但是很明显,您只显示了页面HTML的一个片段,因此您必须验证它是唯一的。

票数 1
EN

Stack Exchange QA用户

发布于 2018-04-10 18:58:14

试试这个css选择器:

代码语言:javascript
复制
button.ui-datepicker-trigger[aria-label='Show Calendar']

看看它是否只匹配一个元素。Bellow是Java代码:

代码语言:javascript
复制
driver.findElement(By.cssSelector("button.ui-datepicker-trigger[aria-label='Show Calendar']"));

我的一些建议:永远不要试图通过它的可见文本来定位web元素,因为这是网络中最易变的东西。

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

https://sqa.stackexchange.com/questions/33040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档