2017-08-23 50 views
0

下面的HTML由jQuery Datatables plugin插入到頁面:問題與得到貝哈特測試,以找到「搜索」是由jQuery的注入頁面輸入數據表插件

<label>Search: 
    <input type="search" class="" placeholder="" aria-controls="datatable-1"> 
</label> 

現有貝哈特測試我有,這不會通過:

Given I am on "/courses" 
And I fill in "Search" with "course" 

所得錯誤是:

Form field with id|name|label|value|placeholder "Search" not found. 

I H AVE試過如下:

  1. 更新等待When I wait for "Search:" to appear的(超時時間60秒)的AndAnd I fill in "Search:" with "course"
  2. 添加變體
  3. 添加等待When I wait for "[type='search']"的變化(超時時間60秒)

這個場景打開Firefox,我可以看到標籤「Search:」和搜索框。

我需要做什麼才能讓這個測試通過?

+0

我還沒有準備好考慮它的解決方案,但切換到鉻驅動程序和使用'當我等待「搜索:」出現「的作品。 –

+0

您可以嘗試使用'search'屬性嘗試''然後用「course」填寫「search」,如果這樣做不起作用,您將需要根據選擇器實現自定義填充步驟。 – lauda

回答

0

behat的I fill in "field" with "value"命令非常慢,我傾向於不使用它的原因。

在這種情況下,由於標籤文本週圍的空白,標籤匹配可能不起作用。它期望一個精確的文本匹配,但額外的空白將它扔掉。如果該元素是不可用在頁面加載時,你需要等待它

$this->getSession()->getPage()->find('css', 'input[type=search]')->setValue('course'); 

你能避免使用此功能的東西,如以下。我注意到你提到等待標籤文本超時,所以你應該檢查你感興趣的元素是否在iframe中。在這種情況下,在硒可以與iframe中的元素進行交互之前,您需要使用switchToIFrame命令。

例如:

//Switch to iframe with id 'iframeID' 
$this->getSession()->switchToIFrame('iframeID'); 

//Do some stuff with the elements contained in the iframe. 

//Switch back to parent iframe. 
$this->getSession()->switchToIFrame(null); 

還有一點要注意的是,如果有I幀的層次,你需要在一個時間切換一個級別。