有没有人对我的代码有什么问题有建议?这是代码:
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
可见。当我进入浏览器并手动完成这些步骤时,我确实看到区域字段可见。我检查过的其他事情是:
还有什么可能导致隐藏区域字段?是否有更好的工具供我解决此问题?
更新
如果我像这样交换了地区和国家/地区的位置:
│ <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>
然后区域变得可见。但如果改变我的behat代码寻找国家,现在它的国家是看不见的!
那么在真实的浏览器中看到的东西是不是很常见?
答案 0 :(得分:0)
首先,问题是关于Selenium(因为你将它用作驱动程序:Driver info: driver.version: unknown (WebDriver\Exception\ElementNotVisible)
)。
使用Selenium,如果它的行为与您在浏览器中看到的行为不同...尝试添加一个小延迟。我可以sleep(1)
或更聪明的东西。
很多问题来自于您在加载后尝试直接访问页面的事实(当某些JS还没有完成时)。
答案 1 :(得分:0)
问题是硒的显示器分辨率为800x600。所以这些元素实际上有时会超出视口。当我将显示器分辨率提高到1366x768时,一切正常。我可以使用selenium截图来调试它。