Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

webdriver
Теги: #<Tag:0x00007f7b6d11d790>

(Oleg Kuzovkov) #1

Собственно что 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’]" - могу взять текст.

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

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


(Stan) #2

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


(Oleg Kuzovkov) #3

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


(Stan) #4

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


(Oleg Kuzovkov) #5

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


(Антон) #6

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


Работа с таблицей, нажатие кнопки в таблице
(Eugene Tkachenko) #7

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

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

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


(sidelnikovmike) #8

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


(Oleg Kuzovkov) #9

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