如何在给定的IWebElement上面找到FIRST标签元素

时间:2017-10-09 14:51:27

标签: c# selenium selenium-webdriver

我正在创建一个名为GetTextboxLabel的函数,它完全按照它所说的,获取在我的POM框架中声明的给定IWebElement的标签。

我宁愿只能调用以下内容,而不是在页面对象类中声明每个文本框标签:

Textbox.GetTextboxLabel()

然后在断言中使用它,如下所示:

Assert.That("Username:" == Username.GetTextboxLabel());

在我的应用程序中,每个标签字段都位于文本框字段的正上方,因此可以安全地假设DOM中文本框(输入)html元素上方的第一个html元素是标签类型,是文本框标签。你可以在这里看到我有一个带有“id ='CUSIP'”的输入,在它上面,有一个带有“CUSIP”文字的标签。该函数将返回标签文本。

<div class="form-group">
    <label class="control-label col-md-3">CUSIP</label>
    <div class="col-md-9">
        <input class="form-control" data-val="true" data-val-length="CUSIP must be exactly 9 characters long" data-val-length-max="9" data-val-length-min="9" data-val-required="The Cusip field is required." id="Cusip" name="Cusip" type="text" value="">
        <span class="field-validation-valid" data-valmsg-for="Cusip" data-valmsg-replace="true"></span>
    </div>
</div>

有人可以提供一些帮助吗?有没有办法用XPath做到这一点?任何建议将不胜感激。

编辑: 我正在寻找PREVIOUS标签字段,而不是下一个。

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点......这里有几个例子。假设e是您传入的INPUT标记或使用扩展方法。

这个使用相对XPATH(以.开头),上升两级(..),然后上升到LABEL。

e.FindElement(By.XPath("./../../label")).Text;

这个也使用相对XPATH(以.开头)并假设所需的LABEL是第一个祖先。

e.FindElement(By.XPath("./ancestor::label")).Text;

答案 1 :(得分:0)

正如JeffC指出的那样,如果有多个元素,我之前的回答并不起作用。所以我复制了你的例子4次,并为每个输入元素更改了ID。

<div class="form-group">
    <label class="control-label col-md-3">CUSIP</label>
    <div class="col-md-9">
        <input class="form-control" data-val="true" data-val-length="CUSIP must be exactly 9 characters long" data-val-length-max="9" data-val-length-min="9" data-val-required="The Cusip field is required." id="Cusip1" name="Cusip" type="text" value="">
        <span class="field-validation-valid" data-valmsg-for="Cusip" data-valmsg-replace="true"></span>
    </div>
</div>

<div class="form-group">
    <label class="control-label col-md-3">CUSIP</label>
    <div class="col-md-9">
        <input class="form-control" data-val="true" data-val-length="CUSIP must be exactly 9 characters long" data-val-length-max="9" data-val-length-min="9" data-val-required="The Cusip field is required." id="Cusip2" name="Cusip" type="text" value="">
        <span class="field-validation-valid" data-valmsg-for="Cusip" data-valmsg-replace="true"></span>
    </div>
</div>

<div class="form-group">
    <label class="control-label col-md-3">CUSIP</label>
    <div class="col-md-9">
        <input class="form-control" data-val="true" data-val-length="CUSIP must be exactly 9 characters long" data-val-length-max="9" data-val-length-min="9" data-val-required="The Cusip field is required." id="Cusip3" name="Cusip" type="text" value="">
        <span class="field-validation-valid" data-valmsg-for="Cusip" data-valmsg-replace="true"></span>
    </div>
</div>

<div class="form-group">
    <label class="control-label col-md-3">CUSIP</label>
    <div class="col-md-9">
        <input class="form-control" data-val="true" data-val-length="CUSIP must be exactly 9 characters long" data-val-length-max="9" data-val-length-min="9" data-val-required="The Cusip field is required." id="Cusip4" name="Cusip" type="text" value="">
        <span class="field-validation-valid" data-valmsg-for="Cusip" data-valmsg-replace="true"></span>
    </div>
</div>

然后我使用下面的XPATH在输入上方找到EACH标签就好了,只要我交出了&#34; ID&#34;根据给出的示例获得适当的输入ID。

//div[div[input[contains(@id, 'Cusip1')]]]//label

//div[div[input[contains(@id, 'Cusip2')]]]//label

//div[div[input[contains(@id, 'Cusip3')]]]//label

//div[div[input[contains(@id, 'Cusip4')]]]//label

希望一切顺利。和平!