2017-07-25 90 views
0

我有一個貝哈特步驟這樣,它斷言有指向一些與/videos/在URL的鏈接:期望的字符串或標識符,但<定界符「/」在8>發現

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 

爲什麼我不能把一個斜線的一步?

+0

你試圖逃離你的選擇,如 「* [HREF〜= \ /視頻\ /]」 ??? – Paladin

+0

yup,嘗試像聖騎士逃跑說 – delboy1978uk

+0

@帕拉丁它不會拋出一個錯誤,但它不會找到更多的元素匹配(我發現他們,當我把選擇器放在瀏覽器中的控制檯'$(「a [href * = '\/ARTIKEL \ /']「)')。 – DanFromGermany

回答

0

前面不需要*findAll會找到給定選擇器的所有元素。
格式的選擇(S)是這樣的:

[href~='/videos/'] 

a[href*='/artikel/'] 

正如你所得到的異常描述,但這並沒有像/,你需要將其添加在單/雙引號。

您也可以嘗試這樣的:

a[href*=artikel] 
+0

如果我使用'a [href'或者只是'[href',如果使用'* ='或'〜='沒有什麼區別 - 它們都不起作用,這並沒有什麼不同。 '/'拋出一個錯誤,'\ /'沒有找到任何東西。 – DanFromGermany

+0

是的,如果你有其他特殊字符而不是一個簡單的工作,你需要添加它在單/雙引號。它會拋出錯誤,因爲'/'不被解釋爲屬性值的一部分。 – lauda

+0

好的單引號做到了! – DanFromGermany

相關問題