Selenium WebDriver로 IE11/Edge 파일 다운로드 자동화
9118 단어 edge셀레늄selenium-webdriverIE11자바
문제점 (누를 버튼)
IE11/Edge에서 파일을 다운로드하는 경우 하단에 응답 대화 상자(알림바)가 나오고 [저장]을 눌러야 합니다.
이 대화 상자입니다.
이번에는 Selenium WebDriver에서 이것을 테스트하는 방법을 조사했습니다. 구현 언어는 Java가 됩니다.
버튼을 누르는 코드
브라우저 설정에서 대화 상자를 숨길 수 없기 때문에 "저장"을 누르는 방법을 조사했습니다.
Testing Downloading Files in IE9 via Selenium 의 코드를 참고로 작성했습니다만, IE의 버전이 다르기 때문에 조금 수정할 필요가 있었습니다.
sample.javaimport java.awt.AWTException;
import java.awt.Robot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
//・・・
// ダウンロード処理を行うエレメント(ボタンなど)を検索
WebElement downloadElement = driver.findElement(By.id("download"));
try {
Robot robot = new Robot();
// 対象エレメントにフォーカスを移動
downloadElement.sendKeys("""");
// Enterキーを押下
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
// ダウンロードの通知バー(ダウンロードマネージャ)が出てくるのを待つ
Thread.sleep(2000);
// Alt+N を押下して、ダウンロードの通知バー(ダウンロードマネージャ)にフォーカスを移動
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_N);
robot.keyRelease(KeyEvent.VK_N);
robot.keyRelease(KeyEvent.VK_ALT);
// Enterキーを押下してダウンロード開始
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
// ダウンロード終了を待つ
Thread.sleep(2000);
// Alt+N を押下して、ダウンロードの通知バー(ダウンロードマネージャ)にフォーカスを移動
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_N);
robot.keyRelease(KeyEvent.VK_N);
robot.keyRelease(KeyEvent.VK_ALT);
// タブキーを3回押下して、通知バーの "X" ボタンに遷移する
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
// Enterキーを押下して、通知バー(ダウンロードマネージャ)を閉じる
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
} catch (AWTException e) {
e.printStackTrace();
}
설명 및 주의사항
코멘트에 쓴 것처럼, 이 코드는 Robot을 사용하여 다운로드에 필요한 키 조작을 수행합니다. 구체적으로는
브라우저 설정에서 대화 상자를 숨길 수 없기 때문에 "저장"을 누르는 방법을 조사했습니다.
Testing Downloading Files in IE9 via Selenium 의 코드를 참고로 작성했습니다만, IE의 버전이 다르기 때문에 조금 수정할 필요가 있었습니다.
sample.java
import java.awt.AWTException;
import java.awt.Robot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
//・・・
// ダウンロード処理を行うエレメント(ボタンなど)を検索
WebElement downloadElement = driver.findElement(By.id("download"));
try {
Robot robot = new Robot();
// 対象エレメントにフォーカスを移動
downloadElement.sendKeys("""");
// Enterキーを押下
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
// ダウンロードの通知バー(ダウンロードマネージャ)が出てくるのを待つ
Thread.sleep(2000);
// Alt+N を押下して、ダウンロードの通知バー(ダウンロードマネージャ)にフォーカスを移動
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_N);
robot.keyRelease(KeyEvent.VK_N);
robot.keyRelease(KeyEvent.VK_ALT);
// Enterキーを押下してダウンロード開始
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
// ダウンロード終了を待つ
Thread.sleep(2000);
// Alt+N を押下して、ダウンロードの通知バー(ダウンロードマネージャ)にフォーカスを移動
robot.keyPress(KeyEvent.VK_ALT);
robot.keyPress(KeyEvent.VK_N);
robot.keyRelease(KeyEvent.VK_N);
robot.keyRelease(KeyEvent.VK_ALT);
// タブキーを3回押下して、通知バーの "X" ボタンに遷移する
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
// Enterキーを押下して、通知バー(ダウンロードマネージャ)を閉じる
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
} catch (AWTException e) {
e.printStackTrace();
}
설명 및 주의사항
코멘트에 쓴 것처럼, 이 코드는 Robot을 사용하여 다운로드에 필요한 키 조작을 수행합니다. 구체적으로는
라는 조작을 실시하고 있습니다.
따라서 테스트 실행 중에 활성 창을 변경하면 해당 창에서 키가 조작되어 테스트가 실패합니다 (예 : 다운로드가 성공적으로 실행되었는지 확인하려면 다운로드 폴더를 열고 버리면, 그쪽에서 키 조작되어 버린다). 이 코드를 테스트하는 동안 활성 창을 전환하지 않도록주의해야합니다.
또, 장래에 브라우저의 사양이 바뀌어, 키 조작이 변경이 되었을 경우는 수정이 필요합니다.
마지막으로 이번 확인한 브라우저 버전을 기재해 둡니다.
IE11 버전 정보:
Edge 버전:
Reference
이 문제에 관하여(Selenium WebDriver로 IE11/Edge 파일 다운로드 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/VA_nakatsu/items/633226898cba4cff564e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)