2013-03-11 27 views
21

我在Opera中有PHPUnit_Selenium問題。如果我在測試代碼中單擊了元素,則頁面將不會加載。在其他瀏覽器(如Firefox,IE,Chrome和Safari)中,它可以正常工作。PHPUnit Selenium,clickAndWait()函數在Opera中不起作用

代碼:

$browser->clickAndWait(link); 

這是硒REMOTE CONTROL接下來的步驟:

click(link) 
waitForPageToLoad(120000) 

超時後,如果我點擊鏈接在瀏覽器中重新加載頁面。

我有Selenium RC v。2.31.0和Opera版本12.41,但我也在Opera 11.50上測試。

你知道什麼是錯的嗎?

+0

你搜索硒bug跟蹤系統? – cweiske 2013-03-11 12:12:20

+0

是的,我搜索硒缺陷跟蹤器,但我沒有找到解決我的問題。 – Szymon 2013-03-11 15:28:47

+0

鏈接是否可能綁定到Opera未正確處理的Javascript事件?你可以在Opera上手動執行鏈接嗎? – 2013-04-01 19:58:21

回答

0

原始文章中沒有足夠的信息來建議一個確定的解決方案,但與評論@Andre提供的「消毒」瀏覽器一起提供,然後提供諸如「Copy xPath」之類的函數是非常具有誤導性的,並且在測試過程中會導致很多問題,這取決於xPath的結構。

例如:

<html> 
    <head></head> 
    <body> 
     <div> 
      <table> 
       <tr> 
        <td>test</td> 
       </tr> 
       <tr> 
        <td>value</td> 
       </tr> 
      </table> 
     </div> 
    </body> 
</html> 

雖然上述代碼是很小的,瀏覽器將測試的XPATH報告爲下列之一:

  • /HTML /體/ DIV /表/ tr/td(這在很多情況下會返回你的測試和數值)
  • /html/body/div/table/tr [1]/td [1](更精確的匹配來測試)
  • /html/body/div/table/tbody/tr/td(no添加tbody)

依此類推。很明顯,你不會遇到這個問題,只能使用更多的唯一標識符(IE id - > // * [@ id =「someElement」]),但是在我們接管的許多項目中,單元測試都是原本只在一個瀏覽器中完成,我們已經看到了一個類似報告的錯誤,它原來的「消毒」的瀏覽器確實創造了兩個問題之一:

  • 的路徑是在一個瀏覽器「消毒檢索「,然後在不能找到該元素的瀏覽器上運行。
  • 路徑在沒有「消毒」的瀏覽器上檢索,然後在瀏覽器上運行,以便進行清理。

這兩個問題導致不匹配。

0

我有類似的問題,不幸的是,我唯一想出的解決方案是......加入「睡眠」。醜陋,但工作。

-1

點擊彈出或創建之後,您只需在點擊功能「waitForElementPresent」或「waitForChange」後調用。

clickAndWait = click()+一些等待函數....好的做法是在點擊之前使用等待函數,這可以節省您的異步調用。

selenium.waitForElementPresent(「myFooElement」); 
selenium.click(「myFooElement」); 
1

我是有在FF這個問題爲好,這是我想出瞭解決方案:

def wait_for_element_by_id(eid): 
    "Wait for an element to be present" 
    element = WebDriverWait(driver, 10).until(
     EC.presence_of_element_located((By.ID, eid)) 
    ) 
    return []