Не могу написать xpath для одновременного click() и getText() checkbox

Собственно что HTML код:

<div class="checkbox">
<input id="AccessList_1__AccessFunctionClassId" type="hidden" value="1306" name="AccessList[1].AccessFunctionClassId" data-val-required="The AccessFunctionClassId field is required." data-val-number="The field AccessFunctionClassId must be a number." data-val="true"/>
<input id="AccessList_1__IsRegistered" class="chkpermissions" type="checkbox" value="true" name="AccessList[1].IsRegistered" data-val-required="The IsRegistered field is required." data-val="true"/>
<input type="hidden" value="false" name="AccessList[1].IsRegistered"/>
        3D Secure              
</div>

По xpath="//label[text()=‘List of Permissions’]/…//input[@type=‘checkbox’]" - могу кликнуть.
По xpath="//label[text()=‘List of Permissions’]/…//div[@class=‘checkbox’]" - могу взять текст.

Но как же сделать что бы и то и то работало?

Помогите пожалуйста.

Уточните вопрос, что значит “и то и то работало” ?

Что бы я мог по одному xPathy делать и клик, и брать текст.

Но в инпуте же нет текста :slight_smile:

Все верно. По этому и пишу тут… Может есть какой-то вариант, что бы не декларировать 2 элемента отдельно.

Если таких групп элементов много то можно создать кастомный элемент как в HTMLelements и реализовать там 2 метода click() и getText()

1 лайк

нет, ну вы конечно можете сделать,типа такого:

var checkBox = webdriver.FindElement(By.XPath("//input[@type='checkbox']"));
var checkBoxText = checkBox.FindElement(By.XPath("//..")).Text;
checkBox.click();

Вам в любом случае всегда нужно будет привязываться к parent node, ибо как было написано выше, попросту у вашего чекбокса нет текста.

Приплюсую к @T0pA. Можно сделать кастомный элемент, если реально таких мест больше одного.
Если в одном месте - используйте 2 элемента.

Спасибо всем. Вижу что кроме как создать класс с двумя полями CheckBox и Lable - нет.
Думаю так и поступлю…