如何使用Robot Framework处理动态元素
我目前正在研究Robot Framework并使用Selenium2Libraries来处理Web应用程序。 我正在处理一个Form,我正在处理一个动态元素,这是一个可编辑的文本区域和下拉列表。
我真的希望有人能指导我如何做到这一点。 我正在做的一个例子是,
[示例元素代码]
input id="textfield-1237-inputEl" class="x-form-field x-form-text x-form-text-default x-form-focus x-field-form-focus x-field-default-form-focus" data-ref="inputEl" size="1" name="textfield-1237-inputEl" maxlength="200" role="textbox" aria-hidden="false" aria-disabled="false" aria-readonly="false" aria-invalid="false" aria-required="false" autocomplete="off" data-componentid="textfield-1237" type="text"
任何有关这方面的信息将非常感激。 谢谢!
有许多类型的标识符可用。您可以搜索,如果值是动态的,您可以使用Xpath标识符来查找定位符.Id只能用于静态值。 在上面的例子中,您可以使用Xpath作为
的xpath = // * [含有(类型(), ‘文本’)]
因为文本是静态的。它不会改变。
当试图处理动态ID和没有关于它们的简单UID的元素时,解决这个问题的最佳方法是使用Xpath 。
Xpath基本上是HTML中元素的位置。 这是解决没有ID随时可用的问题的最好方法(我的工作在我可以使用的任何地方都没有ID,因此我别无选择,只能使用Xpath)
如果使用正确,Xpath真的很强大。 如果不是它们真的很脆弱,可能是一个难以维持的噩梦。 我会给你一个你可能必须使用的潜在Xpath的例子:
Select From List By Label xpath=(//select)[2] DropDownItem1
你说你有一个下拉。 这是你会看到的潜在“看起来像”。 这里的Xpath基本上是说,在整个HTML页面的任何地方找到你找到的第二个下拉列表。
Xpaths需要一段时间才能完成,特别是如果你有使用ID的luxurary。 我用来定位和调试Xpath的工具是:
萤火
Selenium IDE
我现在主要使用Selenium IDE,因为它是一个很好的工具,它基本上允许你在HTML中“选择”一个元素,它会喷出它的ID,CSS路径,Xpath,DOM等…不仅如此,当你来发现更复杂的X路径,有一个“查找”工具,可以直观地显示你的Xpath指向的位置(或者不是,如果它错了)
真正帮助我的是这个 。 它非常有用,并且有很多例子可供你反对。
如果您有任何问题,请回复并尽力帮助
更多例子:
Click Element //span[contains(text(), 'Submit')] Input Text xpath=(//textarea)[3] Some Random Text!
与其他答案一样,我建议您使用Xpath。 使用Xpath可以通过识别该元素与其周围的其他元素的关系来指向元素。 所以我的建议是找到一个可以用作起点的静态元素。
例如:起点有静态id:xpath = // td [@ id =’startingPoint’] / follow-sibling :: select [1]
起始点没有id但是有静态文本(通常是字段的标签):xpath = // td [contains(text(),’Field Label’)] / following-sibling :: select [1]
如果你能告诉我们这个元素是什么……我们可以为你提供更好的例子..
我所做的是改变Xpath,例如:
//*[@id="cec9efb093e14182b361766c26fd1919"]/section/div[1]/ticket/div/div/input
并取出动态生成的Id
cec9efb093e14182b361766c26fd1919
切换为我设置为生成Id的父元素的autoId
。 这是一个廉价的修复,但如果只生成一个父元素,它就可以工作。
所以父元素添加了autoid=container
属性,并在机器人代码中将其引用为[@autoid="container"]/section/div[1]/ticket/div/div/input