我正在用behat编写我的测试,当我尝试在bootstrap模式内的输入上调用fillField时,我遇到了问题。 当我在此输入中发送fillField时,selenium会抛出一个异常说:
Element is not currently visible and so may not be interacted with
我手动创建了一个selenium(通过selenium 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);
}
在我的课程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
var是显示模态的元素。当我执行测试时,它会打开模态,但是当它进入$page->fillField($key, $value)
时它就不起作用了。
更新 我发现我试图填补一个残疾人的领域。我已启用它,现在的问题是它没有填充模态中的字段,只是外部的字段。
答案 0 :(得分:2)
我已设法使用手动驱动程序中的setValue来解决此问题。似乎mink的fillField有一个bug。 我用过:
$this->session->getDriver()->setValue('//*[@id="'.$key.'"]', $value);
而不是
$page->fillField($key, $value);
答案 1 :(得分:1)
我和#34;隐藏"有同样的问题。使用"自定义图标设计的支票/收音机盒"而不是"原生组件"如此处所示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-options(检查浏览器中的字段):
visibility != hidden
display != none
opacity != 0
height and width are both > 0
type != hidden (on input fields)
我正在使用Selenium2,Behat和Mink,我希望此代码段可以帮助修复类似问题的人。