2013-05-06 184 views
0

在主窗口上,我試圖點擊一個打開彈出窗口的鏈接。我從該窗口獲取文本,然後關閉它。 我再次在主窗口上重複大約40個鏈接。問題在彈出窗口和主窗口之間切換

但是,經過3-4次循環後,它失敗了。不知道爲什麼會發生。大多數情況是在'如果'條件不符合時發生,但也可能發生其他情況。

我獲得以下錯誤:

java.util.NoSuchElementException 
at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(Unknown Source) 
at java.util.LinkedHashMap$KeyIterator.next(Unknown Source) 

這裏是我的代碼片段:

for(int x=1;x<119;x+=3) 
{ 
    //waitforelement.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='resultsTable']/tbody/tr["+x+"]/td[2]/a"))); 

    WebElement element = driver.findElement(By.xpath("//*[@id='resultsTable']/tbody/tr["+x+"]/td[2]/a")); 

    Actions builder = new Actions(driver); 
    builder.moveToElement(element).click().build().perform(); 
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

    Set <String> windowids = driver.getWindowHandles(); 
    Iterator <String> iterat = windowids.iterator(); 

    String mainwindowid = iterat.next(); 
    String next1stwindowid = iterat.next(); 

    driver.switchTo().window(next1stwindowid); 
    String pageSource = driver.getPageSource(); 

    Thread.sleep(750); 
    if(!pageSource.contains("Resume is no longer available."))     
    { 
     String Name = driver.findElement(By.xpath("//*/body/table/tbody/tr[4]/td[2]/table/tbody/tr[1]/td[1]/div[2]/span[1]")).getText(); 
     String Phone = driver.findElement(By.xpath("//*/body/table/tbody/tr[4]/td[2]/table/tbody/tr[2]/td")).getText(); 
     String Email = driver.findElement(By.xpath("//*/body/table/tbody/tr[4]/td[2]/table/tbody/tr[3]/td")).getText(); 
     System.out.println("On page "+i+", the detail for list number "+x + "\t candidate is: " +Name +"\t"+ Phone+"\t"+Email);       
    } 

    Thread.sleep(750); 
    driver.close(); 
    Thread.sleep(1000); 
    driver.switchTo().window(mainwindowid);            
} 
+1

我們再次遇到Thread.sleep()中可能存在的使用問題。你可以嘗試使用顯式等待來運行它,看看問題是否存在? – aimbire 2013-05-06 10:57:56

回答

0

由於@aimbire的意見建議,你應該避免使用Thread.Sleep儘可能。相反,我會建議使用WebDriverWait class。有了這個,你可以設置一個最大超時和一個條件(例如,頁面是否包含你的文本)。使用睡眠意味着,如果服務器在每次迭代測試時都沒有在相同的時間內完成操作,則可能會出現諸如您所面臨的不一致情況。

0

如果問題仍然存在,請使用正常的硒等待,嘗試使用流暢的等待。