【问题标题】:Behat/Mink/Selenium2 element is not visibleBehat/Mink/Selenium2 元素不可见
【发布时间】:2014-10-07 15:23:38
【问题描述】:

我正在使用 behat 编写测试,当我尝试在引导模式内的输入上调用 fillField 时遇到问题。 当我在这个输入中发送 fillField 时,硒会抛出一个异常:

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

我手动创建了一个 selenium(通过 selenium IDE)测试并在同一字段上调用 ​​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"

我的 FeatureContext:

/**
 * @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) 时它不起作用。

更新 我发现我正在尝试填写禁用字段。我已经启用它,现在的问题是它没有填充模态框内的字段,只填充外面的字段。

【问题讨论】:

  • 显示场景代码?
  • 嘿。我已经添加了场景和运行它的代码
  • @ThiagoFrança 我使用来自 Behat 的那个(我已经关注了他们的文档)@IanBytchek 在使用$addSubGrid->click() 打开模式后,fillField 上出现错误

标签: twitter-bootstrap selenium behat mink


【解决方案1】:

我已经设法使用驱动程序中的 setValue 手动解决了这个问题。似乎水貂的 fillField 存在错误。 我用过:

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

而不是

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

【讨论】:

  • 奇怪,我以为只是某个地方有点混乱——一切看起来都很整洁。花点时间report it,伙计们可能对此有更多的意见。
  • 我在那里创建了一个问题。谢谢:)
  • 我仍然遇到这个问题。如果您正在查看此解决方案,只需对时间线发表评论。
【解决方案2】:

我对使用“自定义图标”而不是“本机组件”设计的“隐藏”复选框/单选框也有同样的问题,就像这里显示的 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();
}

在我的情况下,它是“不透明度”和“可见性”,但您应该检查以下 css 选项(检查浏览器中的字段):

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

我正在使用 Selenium2、Behat 和 Mink,我希望这段代码 sn-p 可以帮助解决类似问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多