贝哈特/貂/ Selenium2元素不可见(Behat/Mink/Selenium2 element

2019-10-21 02:42发布

我在写我的贝哈特测试,我现在面临一个问题,当我尝试调用fillField上的引导模式里面输入。 当我在此输入硒发送fillField抛出异常的说法:

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

我手动创建硒(硒通过IDE)的测试,并呼吁同字段类型和它工作得很好。

$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"

我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是显示模式的elment。 当我执行的测试打开模式,但是当它进入$page->fillField($key, $value)这是行不通的。

UPDATE我发现,我是想填补一个无效字段。 我已经启用了它,现在的问题是,它没有填充模式中的字段,外面的人。

Answer 1:

我已经成功地解决了这个使用的setValue从手动驾驶。 似乎有一个从貂皮与fillField的错误。 我使用:

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

代替

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


Answer 2:

我有使用“自定义图标”设计“隐藏”复选框/单选按钮,而不是“天然成分”同样的问题,就像这里显示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,贝哈特和水貂,我希望此代码段会帮助别人修复类似的问题。



文章来源: Behat/Mink/Selenium2 element is not visible