2012-11-29 60 views
1

我正在爲通過Web瀏覽器控制的系統創建基於Selenium API的API(類似於您控制路由器和交換機的方式)。Selenium Implicit Timeout停止工作

此API發生的一件事是檢查頁面上是否存在某些元素(取決於設置,它們可能會退出,例如文本框或某種狀態)。

我有這樣一行:

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

我有它工作得很好,直到當在一個時間點上,我跑它,和driver.findElement(通過....);從未超時(網頁中缺少元素)......我等待的最長時間是大約半小時。

我正在運行Ubuntu 12.04 x64作爲我的主機,Windows 7作爲我的客戶,並且它上面有我的Selenium API和使用Java編寫的用於控制產品的代碼。當我將相同的代碼移植到另一個Windows VM或甚至不同的工作站時,它可以正常工作。不是在我的特定虛擬機上。

試圖「重新安裝」月食,重新導入硒的JAR,拉着來自服務器的最新工作代碼...沒有什麼工作......

你有什麼想法,夥計們?

將不勝感激。謝謝。

+0

使用Thead.sleep(1000);作爲替代你是如何確保硒停止在該步驟而不是在下一個? – Amey

+0

我已經通過調試器完成了測試。 – worldpart

回答

0

首先嚐試使用fluentWait等待所有的AJAX頁面上:

public WebElement fluentWait(final By locator){ 
     Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
       .withTimeout(30, TimeUnit.SECONDS) 
       .pollingEvery(5, TimeUnit.SECONDS) 
     .ignoring(org.openqa.selenium.NoSuchElementException.class); 
     WebElement foo = wait.until(
       new Function<WebDriver, WebElement>() { 
        public WebElement apply(WebDriver driver) { 
         return driver.findElement(locator); 
        } 
       } 
     ); 
     return foo;    }  ; 
fluentWait(By.xpath(....blablabla..)).click(); 
//fluentWait(By.xpath(....blablabla..)).getText(); 

其次,儘量

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
+0

謝謝你的算法,這絕對值得一個檢查標記,但這並沒有解決問題(正如我所說的,代碼在其他物理機器和虛擬機上工作),這是這個特定的虛擬機不起作用。所以,它不是Selenium,不是Eclipse ... Ubuntu主機的Windows ...這些是我的想法。我會給你一個大拇指,但稍後,否則人們會停止發佈答案。 – worldpart

+0

另外,它看起來像網頁中沒有AJAX ... – worldpart