2014-10-07 62 views
0

我正在用behat寫我的測試,當我嘗試在引導模式內的輸入上調用fillField時,我正面臨一個問題。 當我在此輸入硒發送fillField拋出異常的說法:Behat/Mink/Selenium2元素不可見

Element is not currently visible and so may not be interacted with 

我創建了一個硒(硒通過IDE)測試手動和同一領域稱爲類型,它工作得很好。

$page = $this->getSession()->getPage() 
$page->fillField("id_item", $value); 

$value是我測試的一個參數。我試圖調用一個函數來等待幾秒鐘,但它沒有奏效。

UPDATE:

場景:

Scenario: Realizar Pedido de Compra 
Given I am on "/" 
When I fill the form with "{\"id\": 1, \"items\":[{\"id_item\": 1}]}" 
Then I should see "Ok" 

我FeatureContext:

/** 
* @When I fill the form with :arg1 
*/ 
public function iFillForm($json) { 
    $formHelper = FormHelper::getInstance($this->getSession()); 
    $formHelper->fill($json); 
} 

在我的課堂表單助手:

public function fill($json) { 
    $handler = new SelectorsHandler(); 
    $handler->registerSelector("css", new CssSelector()); 
    $fileJson = json_decode($json, true); 
    $page = $this->session->getPage(); 
    foreach ($json as $key => $value) { 
     if (is_array($value)) { 
      $addSubGrid = $page->find("css", "#btn-plus-" . $key); 
      if ($addSubGrid != null) { 
      $subGrid = $page->find("css", "#" . $key); 
      $formId = $subGrid->getAttribute("data-form"); 
      $ok = $page->find("css", "#$formId .btn-ok"); 
      foreach ($value as $formItem) { 
       $itemFilled = array(); 
       $addSubGrid->click(); 
       $this->session->wait(
        1000, "$('#modal-$formId').is(':visible')" 
       ); 
       $this->fillForm($page, array("form-item" => $formItem), $itemFilled, false); 
       $ok->press(); 
      } 
      } 
     } else { 
      $page->fillField($key, $value); 
     } 
    } 

$addSubGrid var是顯示模態的元素。當我執行測試時,它會打開模式,但是當它進入$page->fillField($key, $value)時不起作用。

UPDATE 我發現我試圖填充禁用的字段。我已經啓用它,現在的問題是它不會填充模態內的字段,只是外部的字段。

+0

顯示場景代碼? – 2014-10-07 15:33:26

+0

嘿。我已經添加了場景和運行它的代碼 – Augusto 2014-10-07 16:51:00

+0

@ThiagoFrança我使用Behat中的一個(我已經關注了他們的文檔) @IanBytchek在使用'$ addSubGrid->打開模式後'fillField'出現錯誤,點擊()' – Augusto 2014-10-07 17:02:06

回答

2

我已經設法使用手動setValue來解決這個問題。似乎有一個來自水貂fillField的錯誤。 我用:

$this->session->getDriver()->setValue('//*[@id="'.$key.'"]', $value); 

,而不是

$page->fillField($key, $value); 
+0

奇怪的是,我認爲這裏只是有點混淆 - 一切看起來都很整齊。花點時間[報告](https:// github。com/Behat/Mink /問題),大家可能會對此有進一步的評論。 – 2014-10-07 18:34:56

+0

我在那裏創建了一個問題。謝謝:) – Augusto 2014-10-07 18:41:53

+0

我仍然遇到這個問題。如果您正在查看此解決方案,只需發佈​​時間線的評論即可。 – 2015-02-28 19:11:26

1

我有一個「隱藏」的檢查/收音機使用「自定義圖標」設計框而不是「天然成分」同樣的問題,就像這裏顯示http://codepen.io/jamesbarnett/pen/yILjk

解決方案我的問題是cliking之前,設置本機組件,以「看得見」:

private function checkMyBox($locator) 
{ 
    $this->getSession()->executeScript(" 
       var element = document.getElementById('".$locator."'); 
       element.style.opacity = 1; 
       element.style.filter = 'alpha(opacity=100)'; //iexplorer! 
       element.style.visibility = 'visible' 
      "); 
    $this->getSession()->wait(2000); 

    $this->getSession()->getPage()->findField($locator)->click(); 
} 

對我來說,這是「不透明度」和「知名度」,但你應該檢查下面的CSS選項(檢查瀏覽器中的字段):

visibility != hidden 
display != none 
opacity != 0 
height and width are both > 0 
type != hidden (on input fields) 

我使用Selenium2,貝哈特和水貂和我希望這段代碼能夠幫助解決類似問題的人。