【问题标题】:Selenium Webdriver: Robot Class: Unable to enter numbers in text fieldSelenium Webdriver:机器人类:无法在文本字段中输入数字
【发布时间】:2017-04-04 14:49:34
【问题描述】:

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

代码:

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

 }

【问题讨论】:

  • 当我在robot.keypress(Keyeven.VK_2) 的调试中打开了eclipse。该值正在 Eclipse IDE 中打印,但不在应用程序文本框中?任何线索

标签: java selenium-webdriver awtrobot


【解决方案1】:

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

SendKeys():

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

机器人类:

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

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

希望对你有帮助!

【讨论】:

  • 感谢瓦曼的详细解释。 .当我不打扰执行时,数字不会输入到文本字段中。
  • 您的意思是在文本字段中输入?还是仍然失败?
  • 执行直到进入文本字段的行,正如我所说,它在那里失败,数字不会传递到文本字段。
  • 哦,它根本没有输入字符串吗?有什么例外吗?抱歉,我无法清楚地了解问题,因此问题太多
  • no.. 没有输入任何内容。我看到 webdriver 元素异常错误。
【解决方案2】:

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  
 }   

}

【讨论】:

  • 我了解上面给出的机器人示例。但在我的场景中,我编写的代码运行一次,但当我重新运行它时不再运行。
  • 另外,让我知道如何在文本字段中输入数字,因为它比键 Down 和 Enter 事件对我来说是必需的。谢谢。
猜你喜欢
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 2016-03-27
  • 1970-01-01
  • 2016-12-31
  • 2013-10-09
相关资源
最近更新 更多