Java Selenium Webdriver:机器人类:无法在文本字段中输入数字

Java Selenium Webdriver:机器人类:无法在文本字段中输入数字,java,selenium-webdriver,awtrobot,Java,Selenium Webdriver,Awtrobot,我有一个文本字段,我需要在其中输入数字,并将焦点移出该字段。文本字段中的值将自动填充。我已经使用了下面的代码,它在前面工作过。但是,现在运行/调试下面的代码时不要输入数字 代码: public void dwshortname_and_Contract_number_is_entered() throws Throwable { Thread.sleep(5000); driver.findElement(By.id("consumerNamenew")).sendKeys(

我有一个文本字段,我需要在其中输入数字,并将焦点移出该字段。文本字段中的值将自动填充。我已经使用了下面的代码,它在前面工作过。但是,现在运行/调试下面的代码时不要输入数字

代码:

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);        

 }

我对代码中的任何内容都不感兴趣,除了此网页上提供的示例显示了在每次击键之间使用的sleep方法

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  
 }   

}

Selenium webdriver和Robot类中内置的“SendKeys”的用法有所不同

SendKeys():

这与驱动程序和驱动程序所指向的元素相关联,因此当您发送键时,它会精确地转到元素并输入值(即使您正在使用eclipse进行调试)

机器人等级:

另一方面,机器人与驱动程序或驱动程序指向的元素都无关。它所知道的只是生成键盘事件(在您的情况下,就是输入数字)。因此,当您打开eclipse并运行代码时,它实际上会将键盘事件发送到光标指向的位置,即“eclipse”

现在谈到这个问题,当您试图手动执行某些操作来干扰执行时,您将面临一些问题。如果整个脚本在没有任何手动交互的情况下运行,它应该可以正常运行


希望有帮助

当我在LineRobot.keypress(Keyeven.VK_2)的调试中打开eclipse时。值是在Eclipse IDE中打印的,而不是在应用程序文本框中打印的?任何人都理解上面给出的机器人示例。但在我的场景中,我编写的代码只运行了一次,但在重新运行时不会再次运行。此外,请让我知道如何在文本字段中输入数字,而不是按下键并输入事件。谢谢。谢谢你的详细解释,瓦曼。当我不干扰执行时,数字不会输入文本字段。你的意思是输入文本字段?或者它仍然失败?执行一直到输入文本字段的那一行,它失败了,正如我所说的,数字没有传递到文本字段。哦,它根本没有输入字符串?有例外吗?对不起,我无法清楚地了解这个问题,因此问题太多了。。什么也进不去。我看到webdriver元素异常错误。