【问题标题】:How to get the Xpath in behat selenium如何在 behat selenium 中获取 Xpath
【发布时间】:2016-07-20 11:41:13
【问题描述】:

试图在页面中查找 Xpath。 这是我的代码。

   $session = $this->getSession();
   $found = $session->getPage()->findAll('xpath', '//meta[@name ="description"]/@content');
   if (is_null($found)) {
      throw new \Exception(sprintf("Could not find meta %s='%s' with '%s'",));
   }

给出错误

无效的选择器:xpath 表达式的结果 "//html//meta[@name ="description"]/@content" 是:[object Attr]。它 应该是一个元素。 (会话信息:chrome=51.0.2704.103) (驱动程序信息:chromedriver=2.21.371459(36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),平台=Mac OS X 10.10.5 x86_64) (警告:服务器未提供任何堆栈跟踪 信息)

【问题讨论】:

    标签: php selenium xpath behat


    【解决方案1】:

    使用 '@content' 将返回属性内容,当 Behat 转换为 xpath 时,这可能不会返回有效的选择器。

    如果您需要指定该属性,您应该像这样使用它:

    //meta[@name ="description"][@content]
    

    另外请注意 findAll 返回数组而不是单个元素,您可以使用 find 查找与给定选择器匹配的第一个元素。

    如果您需要获取属性的值或获取文本,您可以使用 getAttribute('attribute_name') 或 getText() 等方法。

    在你的情况下,你可以有类似的东西:

    $found->getAttribute('name');
    

    $found->getText();
    

    【讨论】:

    • 之后出现新错误。无效的选择器:由于以下错误,无法使用 xpath 表达式 //html//meta[@name ="description"]@content 定位元素:SyntaxError: 无法在“文档”上执行“评估”:字符串“ //html//meta[@name ="description"]@content' 不是有效的 XPath 表达式。
    • 复制我给出的确切选择器,@content 包含在方括号中
    • 哎呀成功了,有没有办法我可以在那个 xpath 上获得一个值?
    • 第一个场景正在运行,但是在获取值时 echo $elementText = $element->getValue();它不打印任何东西
    • 如果元素具有名为 value 的属性,则 getValue 工作将起作用,否则您应该使用 getAttribute 并将现有属性的名称作为参数。你能用你的元素发布一个 html sn-p 吗?
    猜你喜欢
    • 2018-09-04
    • 2015-04-04
    • 2012-09-29
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多