【问题标题】:WebDriver - finding sibling elementsWebDriver - 查找兄弟元素
【发布时间】:2014-04-29 10:09:54
【问题描述】:

我有一个这样的 html 标记:

<html>
...
<body>
    ....
    <fieldset>
        <legend>Other Details</legend>
        <div>
            <input type='text' id='txt1' title='Detail 01'/>
        </div>
        <div>
            <input type='text' id='txt2' title=''/>
        </div>
        <div>
            <input type='text' id='txt3' title=''/>
        </div>
        <div>
            <input type='text' id='txt4' title='Detail 04'/>
        </div>
    </fieldset>
    .....
<body>
</html>

这就是我想做的。

我需要快速遍历屏幕,找到所有文本框及其标题。当我遇到一个没有标题的文本框时(就像我上面的例子中的两个),我需要检查它们是否出现在一个字段集下,他们确实这样做了。现在,对于这些没有标题的文本框,我所要做的就是获取字段集的图例值并将其分配给文本框。

例如,上例中的第二个和第三个文本框没有标题。在这种情况下,我想做以下事情:

  1. 获取包含字段集的图例值(在本例中为“其他详细信息”)
  2. 导出文本框在字段集中的位置并将其附加到字段集图例中,如其他详细信息 2
  3. 对第三个文本框执行相同的操作。

我实现了第 1 步。当我在第 2 步时,我需要找出文本框在父字段集中的位置。我的 selenium webdriver 代码如下:

WebElement textbox = driver.findElement(By.id("txt2"));
List<WebElement> precedingSiblings =
  textbox.findElement(By.xpath("preceding-sibling::input[@type='text' or @type='Text' or @type='TEXT']"));
String myTitle =
  fieldSetLegend + " " + Integer.toString(precedingSiblings.size()+1);

我希望这段代码可以让我的第二个和第三个文本框的 myTitle 值为 Other Details 2 和 Other Details 3。

但问题是,每次我点击 previousSiblings.size(),它总是返回 0。这是因为每个输入都包含在一个 div 中,因此没有兄弟姐妹。

现在,我想知道一种方法,通过它我可以找到当前元素在包含字段集中的哪个位置。

请帮忙!!!!

【问题讨论】:

    标签: selenium xpath webdriver siblings


    【解决方案1】:

    如何导航到父 div 找到 它 在前面的兄弟,然后从那里找到相关的 input。

    大致:

    parent::div/preceding-sibling::div/input[@type='text' or @type='Text' or @type='TEXT']

    【讨论】:

    • 我试过了,它适用于当前示例。但我想做的有点通用。假设在某些情况下,可能没有包含输入的 div。我正在寻找一种通用的方法来寻找职位。
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2017-06-02
    • 2018-12-25
    • 1970-01-01
    • 2015-01-27
    • 2015-08-27
    相关资源
    最近更新 更多