如何在Robot框架中编写具有多个标识符的动态元素?

2024-09-28 23:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉Robot框架,也不熟悉使用Pycharm编写自动化程序,遇到了一个我找不到答案的问题。我有文本框,uid在每次更改页面时都会更改。我尝试过使用xpath,但所有文本框似乎都具有相同的起始ID 56$551056——因此,在使用xpath=//input[contains(@ID='56$551056--')时,必须尝试添加其他内容。 示例TextBox1

<input type="text" class="gwt-TextBox WNN2" data-automation-id="textInputBox" tabindex="0" role="textbox" id="56$551056--uid74-input" dir="ltr" aria-invalid="false" xpath="1">

示例TextBox2

<input type="text" class="gwt-TextBox WNN2" data-automation-id="textInputBox" tabindex="0" role="textbox" id="56$551056--uid75-input" dir="ltr" aria-invalid="false" xpath="1">

在我自动化的每个部分中有3-5个框,它们似乎都有完全相同的代码,除了uid。删除ID和类名(因为它们都会在ChroPath中发出动态警告)只会给我一个字符串//div//div//div//div//div//div//div//div//div//div//div//div//div//div//div//div//div div//div div//div div div div div//li[2]//div div div[1]//div

非常感谢在这方面的任何帮助或指导。 更新
因此,我有这些连接ID和标签的路径,但我必须删除uid100,因为这是页面上不断变化的部分。我尝试了几种不同的组合,以使其在RF中工作,但我似乎无法完全正确。//Label[@ID='56$551056--uid100 formLabel']//div[contains(text(),'First Name')]//*[@ID=“56$551056——uid100输入”]

<li class="WDSO WOTO" role="presentation" data-automation-id="formLabelRequired"><div class="WFSO WIRO"><label id="56$551056--uid430-formLabel" data-automation-id="formLabel" for="56$551056--uid430-input">First Name</label><div class="WISO wd-74ef43c8-48bb-445c-9b49-1a788d7c4b10" aria-hidden="true">First Name</div></div><div data-automation-id="decorationWrapper" id="56$551056" class="WJSO"><div class="WOAJ"><div class="WHN2 textInput WGN2 WJ5" data-automation-id="textInput" id="56$551056--uid430" data-metadata-id="56$551056" style="visibility: visible;"><input type="text" class="gwt-TextBox WON2" data-automation-id="textInputBox" tabindex="0" role="textbox" id="56$551056--uid430-input" dir="ltr" aria-invalid="false" aria-required="true"></div></div></div></li>

Tags: textdividinputdatatypexpathclass
3条回答

通过使用对以下元素的父元素的引用,使用xpath定位器查找元素

<input type="text" class="gwt-TextBox WNN2" data-automation-id="textInputBox" tabindex="0" role="textbox" id="56$551056 uid74-input" dir="ltr" aria-invalid="false" xpath="1">

xpath示例如下所示:

xpath of parent//input[contains(@class,'TextBox')]

最好的解决方案是与开发人员合作,为每个输入元素提供唯一的属性

如果你不能做到这一点,如果你不能很容易地唯一地识别一个输入元素,那么就找到你能唯一识别的最近的元素,并以此作为查找输入元素的基础

例如,如果输入元素与标签相关联,并且大多数都与标签相关联,则可以将标签元素用作xpath的一部分。例如,//label[@text='First Name']//input。具体操作方式取决于页面的结构-输入元素可能是第一个同级元素、第一个子元素或DOM中其他位置的某个元素,但由标签中的属性指向(例如:<label for= "56$551056 uid74-input">

这个问题并不是robot框架所独有的,它对于几乎每个测试自动化框架来说都是常见的

尝试将item label插入xpath而不是id。例如,如果您的文本框具有标签客户名称,则如下所示:

//标签[text()='Customer Name']/../../输入

(黑暗部分是我的假设)

所以,你可以摆脱恼人的动态ID

请提供完整的HTML,以便我能给出更好的答案

相关问题 更多 >