2017-04-04 21 views
2

숫자를 입력하고 필드에서 포커스를 이동해야하는 텍스트 필드가있어서 텍스트 필드의 값이 자동으로 채워집니다. 이전에 작동했던 코드를 아래에 사용했습니다. 그러나 이제 코드 아래에서 실행/디버깅을 수행하면 숫자가 입력되지 않습니다.Selenium Webdriver : Robot 클래스 : 텍스트 필드에 숫자를 입력 할 수 없습니다.

코드 : 코드에서

public void dwshortname_and_Contract_number_is_entered() throws Throwable { 

    Thread.sleep(5000); 

    driver.findElement(By.id("consumerNamenew")).sendKeys("TestUser"); 

    driver.findElement(By.id("consumerNonew")).sendKeys(""); 

    Robot robot = new Robot();  
    robot.delay(2000); 
    robot.keyPress(KeyEvent.VK_2); 
    robot.keyRelease(KeyEvent.VK_2); 
    robot.keyPress(KeyEvent.VK_0); 
    robot.keyPress(KeyEvent.VK_1); 
    robot.keyPress(KeyEvent.VK_2); 
    robot.keyRelease(KeyEvent.VK_2); 
    robot.keyPress(KeyEvent.VK_2); 
    robot.keyRelease(KeyEvent.VK_2); 
    robot.keyPress(KeyEvent.VK_6); 
    robot.keyPress(KeyEvent.VK_9); 
    robot.keyRelease(KeyEvent.VK_9); 
    robot.keyPress(KeyEvent.VK_9); 
    robot.keyRelease(KeyEvent.VK_9); 
    robot.keyPress(KeyEvent.VK_4); 
    robot.keyPress(KeyEvent.VK_0); 
    robot.keyPress(KeyEvent.VK_TAB);   

} 
+0

이클립스가 robot.keypress (Keyeven.VK_2) 라인에서 디버그에서 열렸을 때. 이 값은 Eclipse IDE에서는 인쇄되지만 응용 프로그램 텍스트 상자에서는 인쇄되지 않습니다. 어떤 단서 – Sowmya

답변

1

셀레늄 webdriver 및 로봇 클래스에 내장입니다 "에서 SendKeys"의 사용에 차이가 있습니다.

에서 SendKeys는() :

이것은 운전자와 운전자가 가리키는 당신이 키를 보낼 때 따라서 정확히 요소로 이동하고 사용 디버깅에도 불구하고 (값에 박았 요소와 관련된 식).

로봇 클래스 : 반면에

로봇은 드라이버 나 요소 드라이버도가 가리키는과는 아무 상관이 없습니다. 키보드 이벤트 (숫자를 입력하는 경우)를 생성하는 것만 알면됩니다. 따라서 이클립스를 열어 코드를 실행하면 실제로 커서가 "일식"을 가리키는 곳으로 키 보드 이벤트를 보냅니다.

이제 문제가 발생하면 일부 작업을 수동으로 실행하는 것을 방해하려고 할 때 문제가 발생합니다. 수동으로 상호 작용하지 않고 전체 스크립트를 실행하면 정상적으로 실행되어야합니다.

희망 하시겠습니까?

+0

Waman에 대한 자세한 설명을 가져 주셔서 감사합니다. . 실행을 방해하지 않으면 텍스트 필드에 숫자가 입력되지 않습니다. – Sowmya

+0

텍스트 필드에 입력하셨습니까? 또는 여전히 실패하고 있습니까? – Waman

+0

실행은 텍스트 필드에 들어가기까지 이어지고 내가 말한 것처럼 텍스트 필드에 숫자가 전달되지 않습니다. – Sowmya

0

Robot Example

것도이 웹 페이지에 제공된 예는 수면 방법은 각 키 사이에 사용되는 보여줄 것을 제외하고 나를 밖으로 이동하지 않습니다.

import java.awt.AWTException; 
import java.awt.Robot; 
import java.awt.event.KeyEvent; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

class Excercise1 { 

    public static void main(String[] args) throws AWTException, InterruptedException {  
     WebDriver driver = new FirefoxDriver(); 
     driver.get("http://spreadsheetpage.com/index.php/file/C35/P10/"); // sample url 
     driver.findElement(By.xpath(".//a[@href=contains(text(),'yearly-calendar.xls')]")).click(); 
     Robot robot = new Robot(); // Robot class throws AWT Exception 
     Thread.sleep(2000); // Thread.sleep throws InterruptedException 
     robot.keyPress(KeyEvent.VK_DOWN); // press arrow down key of keyboard to navigate and select Save radio button 

     Thread.sleep(2000); // sleep has only been used to showcase each event separately 
     robot.keyPress(KeyEvent.VK_TAB); 
     Thread.sleep(2000); 
     robot.keyPress(KeyEvent.VK_TAB); 
     Thread.sleep(2000); 
     robot.keyPress(KeyEvent.VK_TAB); 
     Thread.sleep(2000); 
     robot.keyPress(KeyEvent.VK_ENTER); 
    // press enter key of keyboard to perform above selected action 
} 

}

+0

위의 로봇 예제를 이해합니다. 하지만 필자의 시나리오에서는 필자가 작성한 코드가 한 번 작동했지만 다시 실행하면 다시 작동하지 않습니다. – Sowmya

+0

또한, 키 입력 및 입력 이벤트보다 텍스트 필드에 숫자를 입력 할 수있는 방법을 알려주십시오. 감사. – Sowmya