Symfony 水貂选择器:有什么方法可以获取里面内容的基本元素吗?

Symfony 水貂选择器:有什么方法可以获取里面内容的基本元素吗?,symfony,bdd,Symfony,Bdd,例如,给定链接的文本,检索孔链接元素 我试过这个: $page = $this->getSession()->getPage(); $page->find('content', 'Italiano'); 但它说: 选择器“内容”未注册 编辑:查看everzet答案的链接后,我得到以下信息: $el = $page->find('named', array( 'content', $this->getMainContext()->getSess

例如,给定链接的文本,检索孔链接元素

我试过这个:

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

选择器“内容”未注册

编辑:查看everzet答案的链接后,我得到以下信息:

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

$el->click();
但是我得到了一个关于
click()
函数的错误:

MyFirm\FrontendBundle\Features\Context\CurrencyControllerContext::iChoose()

错误:_click(_byXPath((//html//substant或self::*[contains(normalize space(.)), “英镑”)))[1]”) TypeError:父标记名未定义 ([对象] HtmlHtmlement],“A”,1)@http://myfirm.localhost/s/spr/concat.js:3286 ([对象] HtmlHtmlement],“A”)@http://myfirm.localhost/s/spr/concat.js:3762 ([对象] HTMLHtmlElement])@http://myfirm.localhost/s/spr/concat.js:331 ([object 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
$el->getTagName()
的输出是“html”


这是因为我试图单击的不是元素而是内容吗?在这种情况下,是否可以从内容中获取元素?

不要使用内容选择器。因为在几乎任何情况下,它都会带来你意想不到的结果。例如,当您执行
content(Pound)
时,您希望它将返回一个包含此文本的元素。事实是,目标一的每个父元素都包含您的“磅”文本,包括
。这就是为什么最后会出现
;-)

手册中详细介绍了水貂选择器:

您应该使用:

$page = $this->getSession()->getPage();
$page->find('css', 'Italiano');
这是使用CSS选择器,它就像一个魔术! 但要确保“意大利语”指的是页面上的一个元素(如果是ID,我会使用“#意大利语”)


您可以阅读遍历页面文档。

我已经用遍历页面文档更新了这个答案,因为这是迄今为止最有用的答案。非常感谢@Jimbo
object(Behat\Mink\Element\NodeElement)#438 (2) {
  ["xpath":"Behat\Mink\Element\NodeElement":private]=>
  string(74) "(//html/./descendant-or-self::*[contains(normalize-space(.), 'Pound')])[1]"
$page = $this->getSession()->getPage();
$page->find('css', 'Italiano');