在页面上选择具有相同类名的元素

时间:2014-04-07 16:10:48

标签: ruby selenium scripting automation webdriver

我正在尝试找到在整个页面上分配了相同类的元素。 我尝试使用

browser.find_element(css:first-child,".formProperty.fpMandatory.fpUpdateable .off .collapsedView.Uncompleted .fpColValue .textFieldValueSelector.valueSelector  .integer").send_keys"1000"

但是,它无法说明语法错误SyntaxError:(irb):87:语法错误,意外')',expecting =>

页面上有6个元素分配了相同的类,我需要选择它们并将值发送到它们中。

<div class="body">
<div class="content">
<div class="view">
<div class="formPropertyBoxDefs">
<div id="tile379" class="formProperty fpCompleted fpMandatory " ktype="formProperty">
<div id="tile381" class="formProperty fpMandatory fpUpdateable " ktype="formProperty">
<div id="tile381_selector" class="on" fbtype="selector">
<div id="collapsedtile381" class="collapsedView Uncompleted" style="display:block; cursor:default;">
<div id="tile381_collapsed_statusFlyer" class="fpColStatus">
<div class="fpColTitle">
<div class="fpColValue">
<!-- CssName applied only on expanded mode -->
<div id="tile382" class="textFieldValueSelector valueSelector">
<div onmousedown="valueSelectorOnEnter('tile381', $('tile382_input'), 'focus')">
<input id="tile382_input" class="integer" type="text" onchange="setValueSelectorDirty('cpe111');" selector="selector" value=""/>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="tile383" class="formProperty fpMandatory fpUpdateable " ktype="formProperty">
<div id="tile385" class="formProperty fpCompleted fpMandatory " ktype="formProperty">

我试图通过类选择器选择上面的元素。 我在IRB中运行它,因为我们可以在上面的代码块中看到,它不需要等待而不是iframe。

任何帮助将不胜感激。

谢谢!

Abhishekl

1 个答案:

答案 0 :(得分:2)

:first-child应该是选择器的一部分:

browser.find_element(:css,".formProperty.fpMandatory.fpUpdateable .off .collapsedView.Uncompleted .fpColValue .textFieldValueSelector.valueSelector  .integer:first-child").send_keys"1000"

要选择每个元素,您可以使用:nth-child(n),其中n是您要与之互动的项目的计数:

browser.find_element(:css,".formProperty.fpMandatory.fpUpdateable .off .collapsedView.Uncompleted .fpColValue .textFieldValueSelector.valueSelector  .integer:nth-child(1)").send_keys"1000"
browser.find_element(:css,".formProperty.fpMandatory.fpUpdateable .off .collapsedView.Uncompleted .fpColValue .textFieldValueSelector.valueSelector  .integer:nth-child(2)").send_keys"200"

注意::nth-child(n)不适用于IE 7或IE 8。

希望最后一次编辑:

我认为你需要在这种情况下使用find_elements()

elements = browser.find_elements(:css,".formProperty.fpMandatory.fpUpdateable .off .collapsedView.Uncompleted .fpColValue .textFieldValueSelector.valueSelector  .integer")

elements[0].send_keys"1000"
elements[1].send_keys"200"

编辑以解释:nth-child(n)在这种情况下的失败:

因此,您编辑的原始HTML如下所示:

<div id="tile381" class="formProperty fpMandatory fpUpdateable " ktype="formProperty"></div>
<div id="tile383" class="formProperty fpMandatory fpUpdateable " ktype="formProperty"></div>
<div id="tile385" class="formProperty fpCompleted fpMandatory " ktype="formProperty"></div>
<div id="tile387" class="formProperty fpMandatory fpUpdateable " ktype="formProperty"></div>
<div id="tile389" class="formProperty fpMandatory " ktype="formProperty"></div>
<div id="tile391" class="formProperty fpCompleted fpMandatory " ktype="formProperty"></div>
<div id="tile393" class="formProperty fpCompleted fpMandatory " ktype="formProperty"></div>
<div id="tile395" class="formProperty fpMandatory fpUpdateable " ktype="formProperty"></div>
<div id="tile397" class="formProperty fpMandatory " ktype="formProperty"></div>
<div id="tile399" class="formProperty fpMandatory " ktype="formProperty"></div>

当我测试:nth-child(2)时,它处理了这个特定的HTML。当我尝试nth-child(3)时,它无效。

如果您的HTML看起来像这样:

<div id="tile381" class="formProperty fpMandatory fpUpdateable " ktype="formProperty"></div>
<div id="tile383" class="formProperty fpMandatory fpUpdateable " ktype="formProperty"></div>
<div id="tile387" class="formProperty fpMandatory fpUpdateable " ktype="formProperty"></div>
<div id="tile395" class="formProperty fpMandatory fpUpdateable " ktype="formProperty"></div>

然后:nth-child(n)适用于它应匹配的所有四种情况。

鉴于HTML的结构,find_elements是正确的方法。