웹 페이지에서 확인 링크를 클릭 한 후 발생하는 네이티브 OS 팝업을 처리하기 위해 다음 코드를 작성했습니다. 키 작동이 팝업으로 전송 된 후 다음 페이지가로드 된 후 더 이상 내 드라이버를 제어 할 수 없다는 점을 제외하면 거의 작동합니다. 시도한 셀레늄 코드가 없으므로 제대로 작동 할 것 같습니다. WebDriverException
(일부 내부 Selenium Javascript
파일에서) 또는 시간 초과 예외가 발생합니다. 나는 페이지 핸들을 얻고 새로운 페이지의 요소가 나타날 때까지 명시 적으로 FluentWait
을 기다렸다가 아무런 쓸모없이 다른 Selenium 코드를 시도해 보았습니다. 여기에있는 문제를 이해하기위한 단서는 매우 높이 평가됩니다.Java AWT Robot + Selenium : 키 이벤트를 전송 한 후 웹 요소를 보류하는 방법
는 여기에 몇 가지 인라인 주석이 내 자바 코드입니다 :
driver = new FirefoxDriver();
// String windowHandle = driver.getWindowHandle(); //Saving the window handle to switch to it later
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.navigate().to("https://mysite/login"); //Website with native OS pop up for authentication
driver.findElement(By.cssSelector(".loginbox")).click();
//Convenience method to send a series of key codes to java.awt.Robot
sendKeySequence(KeyEvent.VK_TAB, KeyEvent.VK_TAB, KeyEvent.VK_ENTER);
//TRYING TO GET HOLD OF THE WEB ELEMENTS AGAIN: Nothing works!
//1st try: fluentWait(By.id("BigBox")).click(); //Method to wait until WebDriver element is present on the page
//2nd try: driver.switchTo().window(windowHandle);
//driver.get("www.google.com");
sendKeySequence
구현 :
private void sendKeySequence (int... commandStream) {
Robot robot = new Robot();
for (int keyCode : commandStream) {
robot.keyPress(keyCode);
robot.keyRelease(keyCode);
}
}
PS! fluentWait
구현을 위해이 같은 로봇을 사용해보십시오 this post
내'sendKeySequence' 메서드는 키를 순서대로 눌렀다 놓습니다. 따라서 요소를 찾지 않아도됩니다. 단순히'driver.get ("www.google.com")'을 호출하면 org.openqa.selenium.WebDriverException 예외가 발생합니다. JavaScript 오류 : "a is null"...'그러나 'WebDriverWait' 결과를 통해 요소를 찾고 있습니다. 요소가 발견되지 않은 예외 시간이 끝난 후 –
** sendKeySequence **; 이 사용자 정의 메서드? ** Robot 클래스 **에서 ** java.awt ** 패키지와 같은 메소드를 볼 수 없기 때문에 여기에서 볼 수 있습니다. [https://docs.oracle.com/javase/7/docs/ apache/java/awt/Robot.html] (https://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html) – Subh
예 기본적으로 각 키를 보내고 루프에서 해제합니다. . 게시물에 구현을 추가했습니다. –