Проверка на чтение только в Geb - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь написать тест в Geb, который имеет несколько различных текстовых полей. Сценарий, по сути, состоит в том, что существует пять или шесть HTML-вводов, и пользователю следует разрешить вводить только один из них за раз. То есть, если первое текстовое поле имеет значение, остальные поля должны быть неизменными.

Вместо элемента, имеющего входное значение type = "disabled", у них есть атрибут (я предполагаю, что это атрибут?) Только для чтения.

Вот общий пример:

<input aria-labelledby="Date Input Value 1" id="Date Input 1" name="Date Input 1" class="input-small DateOrEmpty dateInput" value="" style="display: inline-block;" readonly="">

Я пробовал

${"input", id: "Date Input 1"}.@readonly 

а также

${"input", id: "Date Input 1"}.has("readonly")

и мне не очень повезло ..

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Вместо того, чтобы иметь дело с тем фактом, что даже пустой атрибут readonly приведет к тому, что элемент будет доступен только для чтения, но $("input[id='Date Input 1']").@readonly оценивается как значение falsey (так как @readonly возвращает значениеатрибута, который в вашем случае является пустой строкой) почему бы не превратить навигатор в экземпляр FormElement module и использовать метод свойства isReadOnly(), который он предоставляет?

$("input[id='Date Input 1']").module(FormElement).readOnly

РЕДАКТИРОВАТЬ Как указывает kriegaex, $("input[id='Date Input 1']").@readonly фактически оценивается как истинное значение (поскольку WebDriver всегда возвращает строку, содержащую true при получении значения атрибута readonlyдо тех пор, пока атрибут определен для элемента и независимо от фактического значения этого атрибута).

Вышеприведенное означает, что:

$("input[id='Date Input 1']").module(FormElement).readOnly

и:

$("input[id='Date Input 1']").@readonly

эквивалентны в том смысле, что они оценивают истинное значение.

0 голосов
/ 12 мая 2018

У вас есть несколько проблем:

  • Вы используете идентификаторы HTML со встроенными пробелами.На самом деле это недопустимые имена, которые затрудняют написание простых селекторов CSS, таких как #my-id.
  • Синтаксис Geb для селекторов использует скобки, а не фигурные скобки.Фигурные скобки используются для замыканий, которые являются совершенно другим видом зверя.
  • Обратите внимание, что согласно спецификации HTML атрибут readonly является логическим и всегда истинным, если он вообще существуетт.е. обычно вы пишете не readonly="something", а просто readonly.Даже если вы напишите readonly="false", оно будет иметь значение true, поскольку его значение игнорируется, проверяется только его существование.

Так что, если у вас есть этот HTML-код:

<input id="Date Input 1" readonly>
<input id="Date Input 2">
<input id="date-input-3" readonly="false">
<input id="date-input-4">
<input id="date-input-5" readonly="">

Вы можете написать эти селекторы в своем тесте Geb (обратите внимание, что использование пробелов в идентификаторах делает селекторы проще):

$("input[id='Date Input 1']").@readonly
!$("input[id='Date Input 2']").@readonly
$("input#date-input-3").@readonly
!$("input#date-input-4").@readonly
$("input#date-input-5").@readonly
...