Можно ли перейти к элементу с объектом страницы

Я пытаюсь использовать гем page-object Cheezy для всего, чтобы быть последовательным. Однако я не смог найти, как перейти к такому элементу. Ситуация здесь такова, что будет более одной ссылки со всеми одинаковыми тегами, поэтому вам нужно перейти к чему-то идентифицируемому.

@browser.p(:text => /#{app_name}/i).link(:text => 'Add').click

Код, который я ищу, будет примерно таким, чтобы щелкнуть ссылку, расположенную внутри абзаца, но он не работает.

p(:pgraph, id: => 'some-pgraph')
link(:lnk, text: => 'add')    

self.pgraph.lnk

Есть ли способ сделать это с помощью объекта страницы?

Спасибо, Адам


person Adam6806    schedule 06.12.2013    source источник


Ответы (1)


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

Если вы хотите также сохранить ссылку на абзац:

p(:pgraph, id: 'some-pgraph')
link(:lnk){ pgraph_element.link_element(text: 'add') }

Или, если вам не нужен абзац для других вещей, вы можете сделать:

link(:lnk){ paragraph_element(id: 'some-pgraph').link_element(text: 'add') }    

По сути, вы можете использовать блок с вложенными элементами для определения методов доступа. подобно тому, как вы были бы в Watir.

Обратите внимание, что если вы хотите указать идентификатор динамически во время выполнения, вы всегда можете определить метод, чтобы щелкнуть ссылку вместо использования методов доступа:

def click_link_in(paragraph_id)
  paragraph_element(id: paragraph).link_element(text: 'add').click
end
person Justin Ko    schedule 06.12.2013
comment
Вы знаете, что было бы неплохо, если бы вы могли использовать регулярное выражение в объявлении для последующего использования при работе с динамическим содержимым или, возможно, в схеме сценария, где вы хотите снова и снова использовать один и тот же тип элемента с разными именами. link(:lnk){ paragraph_element(id: #{variable_name}).link_element(text: 'add') } - person Adam6806; 07.12.2013
comment
Вы всегда можете просто создать обычный метод для таких ситуаций — см. пример в обновленном ответе. - person Justin Ko; 07.12.2013
comment
Конечно, часть того, что хорошо в объекте страницы, — это все сгенерированные методы, которые вам не нужно создавать вручную. Было бы здорово, если бы вы могли объявить элемент регулярного выражения и иметь методы генерации объекта страницы, которые включают передачу переменной. Наверное, просят слишком много, но это точно было бы здорово! - person Adam6806; 07.12.2013