2014-12-04 1 views
0

웹 페이지에서 확인 링크를 클릭 한 후 발생하는 네이티브 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

답변

0

참조 (가정 를 * 당신이 로봇 클래스 사용하여 2 TAB 키와 1 Enter 키를 눌러야합니다) : 다음

Robot robot = new Robot(); 
    robot.keyPress(KeyEvent.VK_TAB); 
    robot.keyRelease(KeyEvent.VK_TAB); 
    robot.keyPress(KeyEvent.VK_TAB); 
    robot.keyRelease(KeyEvent.VK_TAB); 
    robot.keyPress(KeyEvent.VK_ENTER); 
    robot.keyRelease(KeyEvent.VK_ENTER); 

을 기다리고 시도 다음 코드를 사용하여 페이지의 새 요소 :

try{ 
     WebDriverWait wait = new WebDriverWait(driver,30); 
     WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//xpath of the element"))); 
     element.click(); 
    }catch(Throwable e){ 
     System.err.println("Error came while waiting and clicking the element. "+e.getMessage()); 
    } 
+0

내'sendKeySequence' 메서드는 키를 순서대로 눌렀다 놓습니다. 따라서 요소를 찾지 않아도됩니다. 단순히'driver.get ("www.google.com")'을 호출하면 org.openqa.selenium.WebDriverException 예외가 발생합니다. JavaScript 오류 : "a is null"...'그러나 'WebDriverWait' 결과를 통해 요소를 찾고 있습니다. 요소가 발견되지 않은 예외 시간이 끝난 후 –

+0

** 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

+0

예 기본적으로 각 키를 보내고 루프에서 해제합니다. . 게시물에 구현을 추가했습니다. –

관련 문제