我正在使用此代码:
//input[@type='checkbox'][following-sibling::text()[position()=1]][2]
用于复选框,但我想使用字符串,而不是数字(例如:'Uczyńodpowiedzialnym'而不是[2])。 我试过这个,但它不起作用:
//input[@type='checkbox'][following-sibling::text()[position()=1][contains(., 'Uczyń odpowiedzialnym')]]
HTML code:
<input class="prettifiedIeCheckbox ng-pristine ng-valid" type="checkbox" ng-model="holdersModel.OnlyForRead"></input>
<label>
<span class="bottom">
Tylko do wglądu
</span>
</label>
<input class="prettifiedIeCheckbox ng-pristine ng-valid" type="checkbox" ng-model="holdersModel.ChangeMainHolder"></input>
<label>
<span class="bottom">
Uczyń odpowiedzialnym
</span>
</label>
@sideshowbarker help;)
答案 0 :(得分:5)
您需要查看以下span
兄弟节点中的label
元素文字:
//input[@type='checkbox' and following-sibling::label/span = 'Uczyń odpowiedzialnym']
当然,还有其他方法可以找到元素。例如,选中ng-model
:
//input[contains(@ng-model, 'ChangeMainHolder')]
答案 1 :(得分:3)
您还可以使用以下xpath:
//span[contains(.,'Uczyn odpowiedzialnym')]/preceding::input[1]
这将选择input
元素之前存在的第一个span
元素,其中包含精确的innerHTML / text Uczyńodpowiedzialnym。
答案 2 :(得分:0)
我在@Sam Woods的sqa.stackexchange上找到了另一个(更好的)解决方案,针对我的问题进行了修改:
IWebElement element = driver.findElement(By.xpath("//input[@type='checkbox' and contains(@ng-model, 'ChangeMainHolder')]"));
if (!element.Selected)
{
element.Click();
}