当元素已经聚焦并等待输入时如何在不在网页上找到元素的情况下使用 Sendkeys()

How to use Sendkeys() without finding element on web page when element is already focused and waiting for input

我正在尝试编写一个简单的基于 Java 的 selenium 代码,我将在其中加载页面,为用户名和密码提供所需的值并登录网页。

现在,一旦网页加载,它会自动等待用户输入用户名,即用户名已经获得焦点。那么我可以将键发送到这个已经聚焦的元素吗?一旦我输入了用户名,我就可以使用 TAB 来 select 下一个输入,即密码,然后再次使用 TAB 来 select 登录按钮。

如果您想对特定定位器使用标签按钮,那么

WebElement inputField = driver.findElement(By.Locator("LocatorValue"));
inputField.sendKeys(Keys.TAB);

同样使用下面的代码:

driver.findElement(By.tagName("body")).sendKeys(Keys.TAB);

我已经试过演示版了,还不错

public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "driver/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.google.com");
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.findElement(By.tagName("body")).sendKeys(Keys.TAB);
        Thread.sleep(1000);
        driver.findElement(By.tagName("body")).sendKeys(Keys.TAB);
        Thread.sleep(1000);
        driver.findElement(By.tagName("body")).sendKeys(Keys.TAB);
        Thread.sleep(1000);
        driver.findElement(By.tagName("body")).sendKeys(Keys.TAB);
        Thread.sleep(1000);
        driver.findElement(By.tagName("body")).sendKeys(Keys.TAB);
        System.out.println("OK");
    }

试试这个 - WebElement currentElement = driver.switchTo().activeElement();

有关详细信息,请参阅此 - https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebDriver.TargetLocator.html#activeElement--

或者,您可以使用 ROBOT 函数作为解决方法。 例如:要发送 123456,您可以使用

Robot robot = new Robot();      
robot.keyPress(KeyEvent.VK_1);
robot.keyRelease(KeyEvent.VK_1);
robot.keyPress(KeyEvent.VK_2);
robot.keyRelease(KeyEvent.VK_2);
robot.keyPress(KeyEvent.VK_3);
robot.keyRelease(KeyEvent.VK_3);
robot.keyPress(KeyEvent.VK_4);
robot.keyRelease(KeyEvent.VK_4);
robot.keyPress(KeyEvent.VK_5);
robot.keyRelease(KeyEvent.VK_5);
robot.keyPress(KeyEvent.VK_6);
robot.keyRelease(KeyEvent.VK_6);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);

我过去也成功使用过 Sikuli sendkeys 功能。

要导航到下一个组件,您可以使用 Class KeyboardFocusManager:

KeyboardFocusManager.getCurrentKeyboardFocusManager().focusNextComponent();

要了解有关此用途的更多信息 link https://docs.oracle.com/javase/7/docs/api/java/awt/KeyboardFocusManager.html