Behat/Munk/Selenium2元素不可见



我正在用behat编写测试,当我试图在引导模式中对输入调用fillField时,我遇到了一个问题。当我在这个输入中发送fillField时,selenium抛出一个异常,说:

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

我手动创建了一个selenium(通过seleniumIDE)测试,并在同一字段上调用了type,它运行得很好。

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

$value是我测试中的一个参数。我试着调用一个函数来等待几秒钟,但效果不太好。

更新:

场景:

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"

我的功能上下文:

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

在我的课堂FormHelper:

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变量是显示模态的元素。当我执行测试时,它打开了模态,但当它进入$page->fillField($key, $value)时,它不起作用。

更新我发现我试图填补一个残疾人领域。我已经启用了它,现在的问题是它不填充模态内部的字段,只填充外部的字段。

我已经手动使用驱动程序中的setValue解决了这个问题。看来水貂的fillField有只虫子。我使用过:

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

而不是

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

我对使用"自定义图标"而不是此处所示的"本地组件"设计的"隐藏"复选框/单选框也有同样的问题http://codepen.io/jamesbarnett/pen/yILjk

我的问题的解决方案是在点击之前将本机组件设置为"可见":

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();
}

在我的例子中,它是"不透明度"one_answers"可见性",但你应该检查以下css选项(检查浏览器中的字段):

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

我正在使用Selenium2、Behat和Mink,我希望这个代码片段能帮助人们解决类似的问题。

最新更新