2014-10-07 3 views
0

behat를 사용하여 테스트를 작성 중이며 부트 스트랩 모달 내부의 입력에 fillField를 호출하려고 할 때 문제가 있습니다. 나는이 입력 셀레늄에 fillField를 보낼 때 는 예외 말이 던졌습니다 : 나는 (셀레늄 IDE를 통해) 셀레늄을 만든Behat/Mink/Selenium2 요소가 표시되지 않습니다.

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

테스트 수동과 같은 필드라는 형식을하고 그것을 잘 작동했다.

$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 : 내 클래스 FormHelper에서

/** 
* @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은 모달을 보여주는 elment입니다. 테스트를 실행하면 모달이 열리지 만 $page->fillField($key, $value)에 들어가면 작동하지 않습니다.

UPDATE는 나는 장애인 필드를 채우기 위해 시도 된 것으로 나타났습니다. 나는 그것을 가능하게했고 문제는 지금 외부의 것들과 모달 안에있는 필드를 채우지 못한다는 것이다.

+0

시나리오 코드를 표시 하시겠습니까? –

+0

안녕하세요. 나는 그것을 실행하는 시나리오와 코드를 추가했다. – Augusto

+0

@ ThiagoFrança 나는 Behat으로부터 하나를 사용한다. (나는 그들의 문서를 따라 갔다.) @IanBytchek는'$ addSubGrid->를 사용하여 모달을 연 후'fillField'에 에러가 발생한다. click()' – Augusto

답변

2

필자는 드라이버에서 setValue를 수동으로 사용하여이 문제를 해결할 수있었습니다. 밍크의 fillField 버그가있는 것 같습니다. 은 내가 사용했습니다 :

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

대신

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

이상하게도 어딘가에 약간 혼란이 있다고 생각했는데 모든 것이 깔끔하게 보였다. 잠시 시간을내어 [보고하십시오] (https : // github.co.kr/Behat/Mink/issues), 사람들은 이에 대한 추가 의견을 갖고있을 수 있습니다. –

+0

거기에 문제가 발생했습니다. 감사합니다 :) – Augusto

+0

나는 이것에 대해 여전히 문제가 발생했습니다. 이 솔루션을보고 있다면 타임 라인에 대한 의견을 게시하십시오. –

1

여기에 표시된 것처럼는 "사용자 정의 아이콘"을 사용하여 설계 "숨겨진"확인/라디오 상자 대신 "기본 구성 요소"와 같은 문제가

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(); 
} 
: 내 문제에 대한 http://codepen.io/jamesbarnett/pen/yILjk

솔루션 cliking 이전에 "볼 수"기본 구성 요소를 설정하는 것이 었습니다 내 경우 0

그것은 "불투명도"과 "시정"을했다하지만 당신은 CSS-옵션 (브라우저에서 필드를 검사) 다음과 같은 확인해야합니다 : 나는 Selenium2, Behat 및 밍크과 내가 사용하고

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

을 이 코드 스 니펫이 유사한 문제를 수정하는 데 도움이되기를 바랍니다.

관련 문제