以另一种方式检查'checkBox' - > XPATH

时间:2015-09-03 13:04:21

标签: selenium xpath selenium-webdriver

我正在使用此代码:

//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;)

3 个答案:

答案 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();
}