2017-05-09 23 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還沒有完成時)。