有人对我的代码有什么问题有任何建议吗?下面的代码:behat无法与隐形字段互动
echo $this->find("css","#address-container")->getHtml();
$field = $this->find("css","#address-container .region input");
echo $field->isVisible() ? "I can see myself!!!" : "no can not see";
echo $field->getAttribute('type');
$field->setValue("ON");
当我运行测试,这是结果
│ <legend>Address</legend>
│ <div class="field city">
│ <label>*City</label>
│ <input class="required city" name="address_add[0][city]" value="" type="text">
│ </div>
│ <div class="field region">
│ <label>*Prov./State</label>
│ <input class="required region" name="address_add[0][region]" value="" type="text">
│ </div>
│ <div class="field country">
│ <label>*Country</label>
│ <input class="required country" name="address_add[0][country]" value="" type="text">
│ </div>
│ no can not seetext
Element is not currently visible and so may not be interacted with
Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:37:03'
System info: host: 'ubuntu', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.15-x86_64-linode81', java.version: '1.8.0_121'
Driver info: driver.version: unknown (WebDriver\Exception\ElementNotVisible)
我期待的#address-container .region input
可见。当我进入我的浏览器并手动执行这些步骤时,我确实看到区域字段可见。我检查了其他的事情是:
- 有页面
- 上没有其他区域输入字段,如果我有城市或国家的替代区域,一切工作正常
- 有没有延迟JavaScript调用操纵区域输入字段
还有什么可能导致区域字段被隐藏?有没有更好的工具可以帮我解决这个问题?
UPDATE
如果我换了地区和国家HTML这样的位置:
│ <div class="field country">
│ <label>*Country</label>
│ <input class="required country" name="address_add[0][country]" value="" type="text">
│ </div>
│ <div class="field region">
│ <label>*Prov./State</label>
│ <input class="required region" name="address_add[0][region]" value="" type="text">
│ </div>
然后区域变得可见。但如果改变我的代码寻找国家,现在它是不可见的国家!
那么看到的东西不同,我没有看到在真正的浏览器?
尝试通过在浏览器中检查来查找是否返回单个元素。您可能需要添加一个等待,首先您可以使用像'sleep(2);'等盲目等待来测试,然后添加一个有条件的等待。请提供整个#地址容器表单的html代码片段。 – lauda
谢谢劳达。我刚刚更新了我的问题。如果我颠倒了地区和国家的html节点的顺序,那么地区是可见的,而国家不是。即使当我通过我的网络浏览器中的人眼看东西时,我可以看到它们都是可见的......怪异的 – John
尝试使用如下选择器:'#address-container input.region'或'#address-container input [name * =区域]' – lauda