2017-06-16 81 views
-1

當我使用它點擊下載按鈕時,會在Firefox中彈出一個下載按鈕。它正確運行並保存文件,但當我在循環中迭代它不保存,而是打開文件。下面提到的代碼的解決方案嗎?使用機器人類的Selenium webdriver中的文件下載

for (int j = 0; j < StoreSelectedYear_size; j++) { 
      System.out.println(StoreSelectedYear.get(j)); 
      YearSelection(StoreSelectedYear.get(j)); 
      Thread.sleep(5000); 

      filedownload(i); 

     } 
     StoreSelectedYear.clear(); 
    } 

} 

public void YearSelection(String StoreSelectedYearStr) throws InterruptedException, AWTException { 
    Select yearselction = new Select(driver.findElement(By.cssSelector("#u14_input"))); 
    yearselction.selectByVisibleText(StoreSelectedYearStr); 
    Thread.sleep(5000); 

} 

public void filedownload(int i) throws AWTException, InterruptedException { 
    driver.findElement(By.xpath("//button[@id='export']")).click(); 
    Thread.sleep(6000); 
    Robot robot = new Robot(); 
    robot.delay(5000); 
    // Thread.sleep throws InterruptedException 

    if (i == 0) { 
     robot.keyPress(KeyEvent.VK_DOWN); 
     robot.delay(2000); 
     robot.keyPress(KeyEvent.VK_TAB); 

     robot.keyPress(KeyEvent.VK_TAB); 

     robot.keyPress(KeyEvent.VK_TAB); 

     robot.keyPress(KeyEvent.VK_ENTER); 

    } 

火狐保存圖像:

Firefox save image

+0

您的問題陳述並未告訴我們您遇到的問題。請編輯正確的問題陳述以及您面臨的錯誤以進行更好的調試。 – demouser123

回答

0

您可以嘗試通過獲取下載元素的src屬性,然後使用http庫如HttpUnit做出一個替代的解決方案直接請求下載文件。

這有額外的好處,它會做的讓您將文件作爲對象更容易,如果你需要驗證,或者如果您的使用情況相匹配的測試中操縱它的工作。

我認爲這是因爲如果你這樣做了工作,然後利用一種不需要操作屏幕座標和窗口的位置的解決方案往往總是一個更好的選擇。在測試下載提示時可能沒什麼價值,因爲它不適用於沙盒中的應用程序。

您可以使用此代碼檢索當前硒測試會話中正在使用的Cookie,以防萬一對您有吸引力。

Set<Cookie> seleniumCookies = driver.manage().getCookies(); 
    org.apache.http.client.CookieStore cookieStore = new org.apache.http.client.BasicCookieStore(); 

    for (Cookie seleniumCookie : seleniumCookies) { 
     org.apache.http.impl.cookie.BasicClientCookie basicClientCookie = 
       new BasicClientCookie(seleniumCookie.getName(), seleniumCookie.getValue()); 
     basicClientCookie.setDomain(seleniumCookie.getDomain()); 
     basicClientCookie.setExpiryDate(seleniumCookie.getExpiry()); 
     basicClientCookie.setPath(seleniumCookie.getPath()); 
     cookieStore.addCookie(basicClientCookie); 
    } 

    return cookieStore; 

這將從根本上轉變你的cookies成與Apache HTTP庫,你可以用它來發出請求到您的應用程序,而不應用實現你走出硒使用的形式。如果您的請求在此示例中對cookie進行了更改,那麼您可以在之後使用新版本重新設置selenium中的cookie。

相關問題