behat 不能与不可见的领域互动

behat can not interact with invisible field

有人对我的代码有什么问题有建议吗?这是代码:

     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 可见。当我转到我的浏览器并手动完成这些步骤时,我确实看到区域字段是可见的。我检查的其他内容是:

还有什么可能导致区域字段被隐藏?是否有更好的工具可供我用来解决此问题?

更新

如果我像这样交换地区和国家的位置 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>

然后区域变得可见。但是,如果更改我的行为代码以查找国家/地区,那么现在国家/地区是不可见的!

那么是不是看到了一些我在真实浏览器中看不到的不同东西?

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

对于 Selenium,如果它的行为与您在浏览器中看到的不同...尝试添加一个小的延迟。我可以成为 sleep(1) 或更聪明的人。

确实有很多问题是因为您尝试在加载后直接访问页面(当某些 JS 尚未完成时)。

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