如何使用Robot Framework处理动态元素

时间:2016-12-15 08:35:49

标签: java web-applications robotframework dynamicobject selenium2library

我目前正在开发Robot Framework并使用Selenium2Libraries来处理Web应用程序。我正在处理一个表单,我正在处理动态元素,这是一个可编辑的文本区域和下拉列表..

我真的希望有人能指导我如何做到这一点。我正在做的一个例子是,

[示例元素代码]

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"

有关此的任何信息将非常感谢。谢谢!

4 个答案:

答案 0 :(得分:1)

有许多类型的标识符可用。您可以搜索,如果值是动态的,您可以使用Xpath标识符来查找定位符.Id只能用于静态值。 在上面的例子中,您可以使用Xpath作为

的xpath = // * [含有(类型(), '文本')]

因为文字是静态的。它不会改变。

答案 1 :(得分:1)

当尝试处理动态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的工具是:

FireBug

Selenium IDE

我现在主要使用Selenium IDE,因为它是一个很好的工具,它基本上可以让你选择" HTML中的一个元素,它会喷出它的ID,CSS路径,Xpath,DOM等......不仅如此,当你发现更复杂的X路径时,还有一个" Find"用于直观地显示Xpath所指向的工具(或者不是,如果错误的话)

真正帮助我的是This。这真的很有用,并且有许多例子供你反对。

如果您有任何问题,请回复并尽力帮助

更多例子:

Click Element    //span[contains(text(), 'Submit')]
Input Text    xpath=(//textarea)[3]    Some Random Text!

答案 2 :(得分:0)

与其他答案一样,我建议您使用Xpath。 使用Xpath可以通过识别该元素与其周围的其他元素的关系来指向元素。所以我的建议是找到一个可以用作起点的静态元素。

例如: 起点有静态id: 的xpath = // TD [@ ID = '起点'] /以下同胞::选择[1]

起点没有id但有静态文本(通常是字段的标签): xpath = // td [contains(text(),'Field Label')] / following-sibling :: select [1]

如果你能告诉我们这个元素是什么......我们可以为你提供更好的例子..

答案 3 :(得分:-1)

我所做的是改变Xpath,例如:

//*[@id="cec9efb093e14182b361766c26fd1919"]/section/div[1]/ticket/div/div/input

并取出Id动态生成的内容cec9efb093e14182b361766c26fd1919以切换{I}设置为生成Id的父元素。它是一个廉价的修复程序,但如果只生成一个父元素,它就可以工作。

所以父元素添加了属性autoId,我在机器人代码中将其引用为autoid=container

相关问题