Селекторы норки: есть ли способ получить элемент внутри базы контента? - PullRequest
5 голосов
/ 30 сентября 2011

например, учитывая текст ссылки, получить элемент дырочной ссылки.

Я пробовал это:

$page = $this->getSession()->getPage();
$page->find('content', 'Italiano');

Но там написано:

Селектор «контент» не зарегистрирован.

РЕДАКТИРОВАТЬ : после проверки ссылок ответов everzet у меня есть это:

$el = $page->find('named', array(
        'content', $this->getMainContext()->getSession()->getSelectorsHandler()->xpathLiteral('Pound')));

$el->click();

но я получаю эту ошибку о функции click():

When I choose "Pound sterling" #

MyFirm \ FrontendBundle \ Особенности \ Context \ CurrencyControllerContext :: iChoose ()

ошибка: _click (_byXPath ( "(// HTML /./ потомок или-я :: * [содержит (нормализуют-пространство (),. 'Фунт')]) [1] ")) Ошибка типа: parent.tagName не определен ([Объект HTMLHtmlElement], "А", 1) @ http://myfirm.localhost/s/spr/concat.js:3286 ([Объект HTMLHtmlElement], "A") @ http://myfirm.localhost/s/spr/concat.js:3762 ([Объект HTMLHtmlElement]) @ http://myfirm.localhost/s/spr/concat.js:331 ([объект HTMLHtmlElement], false, false, (void 0)) @ http://myfirm.localhost/s/spr/concat.js:708 ([Объект HTMLHtmlElement]) @ http://myfirm.localhost/s/spr/concat.js:478 () @ http://myfirm.localhost/s/spr/concat.js:3016 () @ http://myfirm.localhost/s/spr/concat.js:3016 @ http://myfirm.localhost/s/spr/concat.js:2822

  <a

href = '/ s / dyn / Log_getBrowserScript? Href = null & n = 3286'> Нажмите для скрипт браузера

Это начало вывода var_dump($el):

object(Behat\Mink\Element\NodeElement)#438 (2) {
  ["xpath":"Behat\Mink\Element\NodeElement":private]=>
  string(74) "(//html/./descendant-or-self::*[contains(normalize-space(.), 'Pound')])[1]"

И вывод $el->getTagName() равен 'html'.

Это потому, что я пытаюсь щелкнуть что-то, что не является элементом, а просто контентом? В таком случае, есть ли способ получить элемент из контента?

Ответы [ 2 ]

3 голосов
/ 23 января 2014

Вы должны использовать:

$page = $this->getSession()->getPage();
$page->find('css', 'Italiano');

Это использует селекторы CSS, и это работает как волшебство!Но убедитесь, что «Italiano» относится к элементу на странице (я бы использовал «#Italiano», если это идентификатор).

Вы можете прочитать документацию по страницам перемещения здесь .

2 голосов
/ 05 октября 2011

Не используйте селектор контента. Потому что почти в любом случае это даст результаты, которых вы не ожидаете. Например, когда вы делаете content(Pound), вы ожидаете, что он вернет вам элемент, который содержит этот текст. Реальность такова, что каждый родительский элемент целевого объекта содержит ваш текст «Pound», включая <html/>. Вот почему вы получаете <html/> в конце; -)

Селекторы норок хорошо объяснены в руководстве:

...