我正在创建一个名为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标签字段,而不是下一个。
答案 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
希望一切顺利。和平!