0

我目前正在研究机器人框架并使用 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

4 回答 4

1

有许多类型的标识符可用。您可以搜索,如果值是动态的,您可以使用 Xpath Identifier 查找定位器。Id 只能用于静态值。在上述情况下,您可以使用 Xpath 作为

xpath=.//*[包含(type(),'text')]

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

于 2016-12-15T09:23:20.680 回答
1

当尝试处理动态 ID 和没有简单 UID 的元素时,最好的解决方法是使用Xpath

Xpath 基本上是元素在 HTML 中的位置。这是解决没有现成可用 ID 问题的最佳方法(我的工作在任何我可以使用的地方都没有 ID,因此我别无选择,只能使用 Xpaths)

如果使用得当,Xpath 真的很强大。如果不是,它们真的很脆弱,维护起来可能是一场噩梦。我会给你一个你可能不得不使用的潜在 Xpath 的例子:

Select From List By Label    xpath=(//select)[2]    DropDownItem1

你说你有一个下拉菜单。这是您会看到的潜在“外观”。这里的 Xpath 基本上是说,在整个 HTML 页面的任何位置找到第二个下拉列表。

Xpaths 将需要一段时间来让您熟悉,特别是如果您有使用 ID 的奢侈体验。我用来定位和调试 Xpath 的工具是:

萤火虫

硒 IDE

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

真正帮助我的是This。它真的很有用,并且有很多示例供您参考。

如果您有任何问题,请回复,我会尽力提供帮助

更多示例:

Click Element    //span[contains(text(), 'Submit')]
Input Text    xpath=(//textarea)[3]    Some Random Text!
于 2016-12-15T09:28:52.373 回答
0

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

例如:起点有静态id:xpath=//td[@id='startingPoint']/following-sibling::select[1]

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

如果您可以让我们了解元素是什么……我们可以为您提供更好的示例……

于 2016-12-16T05:20:12.443 回答
-1

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

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

并取出Id动态生成的内容cec9efb093e14182b361766c26fd1919以切换到autoIdI 设置为正在生成 Id 的父元素。这是一个便宜的修复,但如果只生成一个父元素,它就可以工作。

所以父元素添加了属性,我在机器人代码中autoid=container引用它[@autoid="container"]/section/div[1]/ticket/div/div/input

于 2017-11-28T09:35:34.533 回答