2014-10-07 86 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,贝哈特和水貂和我希望这段代码能够帮助解决类似问题的人。