【问题标题】:Expected string or identifier, but <delimiter "/" at 8> found预期的字符串或标识符,但找到 <delimiter "/" at 8>
【发布时间】:2017-07-25 08:02:12
【问题描述】:

我有一个像这样的 Behat 步骤,它断言 URL 中有一个指向带有 /videos/ 的东西的链接:

And I must see at least 1 "*[href~=/videos/]"

实现如下:

/**
 * Asserts that at least X amount of Y exist
 *
 * @Then /^I must see at least (?P<amount>\d+) "([^"]*)"$/
 */
public function iMustSeeAtLeast($amount, $selector)
{
    $session = $this->getSession();
    $container = $this->getContainer() ?: $session->getPage();

    $elements = $container->findAll('css', $selector);
    $actual = count($elements);
    AssertionAbstract::assertGreaterThanOrEqual(
        (int)$amount,
        (int)$actual,
        'Expected at least ' . $amount . ' of ' . $selector . ', found only ' . $actual . ' on ' . $session->getCurrentUrl() . '.'
    );
}

例外是:

Exception 'Symfony\Component\CssSelector\Exception\SyntaxErrorException'
with message 'Expected string or identifier, but <delimiter "/" at 8> found.'
in vendor/symfony/css-selector/Exception/SyntaxErrorException.php:34

为什么我不能在步骤中添加斜线?

【问题讨论】:

  • 你有没有尝试像“*[href~=\/videos\/]”这样逃避你的选择器???
  • 是的,试着像圣骑士说的那样逃跑
  • @Paladin 然后它不会抛出错误,但它没有找到匹配的元素(当我将选择器放在浏览器的控制台中时找到它们$("a[href*='\/artikel\/']"))。

标签: php symfony exception behat mink


【解决方案1】:

您不需要前面的*findAll 会找到给定选择器的所有元素。
像这样格式化你的选择器:

[href~='/videos/']

a[href*='/artikel/']

如您得到的异常中所述,它不喜欢/,您需要将其添加在单引号/双引号中。

你也可以试试:

a[href*=artikel]

【讨论】:

  • 如果我使用a[href 或只使用[href 并没有什么不同,如果我使用*=~= 也没有什么不同——它们都不起作用。 / 抛出错误,\/ 没有找到任何东西。
  • 是的,如果您有其他特殊字符而不是简单的工作,则需要将其添加在单引号/双引号中。它会引发错误,因为/ 不被解释为属性值的一部分。跨度>
猜你喜欢
  • 1970-01-01
  • 2020-06-16
  • 2014-06-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
相关资源
最近更新 更多