2017-05-09 80 views
0

有人对我的代码有什么问题有任何建议吗?下面的代码: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> 

然后区域变得可见。但如果改变我的代码寻找国家,现在它是不可见的国家!

那么看到的东西不同,我没有看到在真正的浏览器?

+0

尝试通过在浏览器中检查来查找是否返回单个元素。您可能需要添加一个等待,首先您可以使用像'sleep(2);'等盲目等待来测试,然后添加一个有条件的等待。请提供整个#地址容器表单的html代码片段。 – lauda

+0

谢谢劳达。我刚刚更新了我的问题。如果我颠倒了地区和国家的html节点的顺序,那么地区是可见的,而国家不是。即使当我通过我的网络浏览器中的人眼看东西时,我可以看到它们都是可见的......怪异的 – John

+0

尝试使用如下选择器:'#address-container input.region'或'#address-container input [name * =区域]' – lauda

回答

0

问题是硒的显示器分辨率为800x600。所以这些元素实际上有时不在视口中。当我将显示器分辨率提高到1366x768时,一切正常。我能够使用selenium截图进行调试。

0

首先,问题是关于Selenium(因为您使用它作为驱动程序:Driver info: driver.version: unknown (WebDriver\Exception\ElementNotVisible))。

有了硒,如果它的行为与你在浏览器中看到的行为不同......尝试添加一个小的延迟。我可以是sleep(1)或更聪明的东西。

真的很多问题来自于你试图在加载后直接访问页面(当一些JS还没有完成时)。