2014-03-25 62 views
0

所以有很多的方式,使硒等如Selenium Webdriver PHPUnit:可能等待整個函數而不是元素?

sleep(1); // sleeps for 1 second 

while ($this->conditionIsFalse()) { sleep(500); } 

waitForPageElement 

等等 這些是一個特定的元素,但有可能創建一個腳本,使硒不管什麼都等待每一個元素?或一個頁面等...

所以基本上它會適用於整個功能,而不僅僅是你正在尋找的當前元素。如果您在一個頁面或多個頁面上搜索50多個項目,我寧願讓硒等待每個搜索後的每個頁面加載/元素waitForPageElement ...

這樣的事情可能嗎?

回答

0

所有元素隱含等待

function setUpPage() { 
    $this->timeouts()->implicitWait(25000); 
} 

Selenium docs

隱含的等待是告訴webdriver的努力時,輪詢DOM一定 的時間找到一個或多個元素,如果它們不是立即可用的。默認設置爲0.一旦設置, 隱式等待設置爲WebDriver對象實例的生命週期。

此外,你總是可以寫一個新的函數,它等待每個元素,並使用它而不是默認方法。

protected function _waitAndFind($selector) { 
     $element = $this->waitUntil(function($testCase) use ($selector) { 
      try { 
       $element = $testCase->_byQuery($selector); 
       if ($element->displayed()) { 
        return $element; 
       } 
      } catch (PHPUnit_Extensions_Selenium2TestCase_WebDriverException $e) {} 
     }, 8000); 
     return $element; 
} 
+0

如果可能,我會避免implicitWait。 'implicitWait'將允許我們更容易地編寫錯誤的代碼。例如,它允許我們編寫不處理競爭條件的代碼。 – whhone

+0

@whhone除了implicitwaits,你還有什麼建議嗎? – Decypher

相關問題