Selenium Webdriver:机器人 Class:无法在文本字段中输入数字
Selenium Webdriver: Robot Class: Unable to enter numbers in text field
我有一个文本字段,我需要在其中输入数字并将焦点移出该字段,文本字段中的值将自动填充。我使用了以下较早工作的代码。但是,现在 运行/调试下面的代码不要输入数字。
代码:
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);
}
除了此网页上提供的示例显示每次击键之间使用的睡眠方法外,您的代码中没有任何内容让我印象深刻。
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 Class 中内置的 "SendKeys" 的用法有所不同。
发送密钥():
这与驱动程序和驱动程序指向的元素相关联,因此当您发送密钥时,它会准确地转到元素并放入值(即使您正在使用 eclipse 进行调试)。
机器人Class:
另一方面,机器人与驱动程序和元素驱动程序指向的都无关。它所知道的就是生成键盘事件(在您的情况下是输入数字)。所以当你通过代码打开eclipse和运行时,它实际上会将键盘事件发送到光标指向的地方"eclipse"。
现在谈到这个问题,当您尝试手动干扰执行某些操作时会遇到问题。如果整个脚本 运行 没有任何手动交互,它应该 运行 就好了!
希望对您有所帮助!
我有一个文本字段,我需要在其中输入数字并将焦点移出该字段,文本字段中的值将自动填充。我使用了以下较早工作的代码。但是,现在 运行/调试下面的代码不要输入数字。
代码:
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);
}
除了此网页上提供的示例显示每次击键之间使用的睡眠方法外,您的代码中没有任何内容让我印象深刻。
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 Class 中内置的 "SendKeys" 的用法有所不同。
发送密钥():
这与驱动程序和驱动程序指向的元素相关联,因此当您发送密钥时,它会准确地转到元素并放入值(即使您正在使用 eclipse 进行调试)。
机器人Class:
另一方面,机器人与驱动程序和元素驱动程序指向的都无关。它所知道的就是生成键盘事件(在您的情况下是输入数字)。所以当你通过代码打开eclipse和运行时,它实际上会将键盘事件发送到光标指向的地方"eclipse"。
现在谈到这个问题,当您尝试手动干扰执行某些操作时会遇到问题。如果整个脚本 运行 没有任何手动交互,它应该 运行 就好了!
希望对您有所帮助!