我正在尝试编写一个简单的基于Java的selenium代码,我将在其中加载页面,为用户名&提供所需的值。密码和登录网页。
现在,一旦网页加载,它会自动等待用户输入用户名,即用户名已经集中。所以我可以将密钥发送到这个已经集中的元素。一旦我输入了用户名,我就可以使用TAB选择下一个输入,即密码,再选择TAB选择Login按钮。
答案 0 :(得分:2)
试试这个 - WebElement currentElement = driver.switchTo().activeElement();
有关详细信息,请参阅此处 - https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebDriver.TargetLocator.html#activeElement--
答案 1 :(得分:0)
如果你想使用Tab键到特定的定位器那么
WebElement inputField = driver.findElement(By.Locator("LocatorValue"));
inputField.sendKeys(Keys.TAB);

答案 2 :(得分:0)
使用以下代码:
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");
}
答案 3 :(得分:0)
或者,您可以使用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功能。
答案 4 :(得分:0)
要导航到下一个组件,可以使用Class KeyboardFocusManager:
KeyboardFocusManager.getCurrentKeyboardFocusManager().focusNextComponent();
要详细了解此使用链接https://docs.oracle.com/javase/7/docs/api/java/awt/KeyboardFocusManager.html
答案 5 :(得分:-1)
否您不应在未找到元素的情况下使用Sendkeys()
。
正如您提到的一旦网页加载,它会自动等待用户输入用户名,即用户名已经集中,类似于用户名字段,并且是基于HTMLElement.focus()
。
如果可以聚焦,HTMLElement.focus()
方法将焦点放在指定的元素上。
但是对于 Selenium 来执行它的任务,浏览器客户端需要处于焦点,类似于浏览器窗口才能成为焦点,基于Window focus()
方法。
Window focus()
方法将焦点设置为当前窗口。
现在从上面的两个讨论中可以明显看出,用户名字段无法帮助 Selenium 与 WebElements 进行交互
sendKeys()
方法用于模拟键入元素,可以设置其值。现在要设置其粗略值,您必须使用以下方法之一查找/定位元素/元素:
可以使用sendKeys(Keys.TAB);
与WebElement myElem = driver.switchTo().activeElement();
联系,通过switchTo()
切换到文档中当前具有焦点的元素,或者使用body元素切换这是无法检测到的。这与Javascript中调用document.activeElement
的语义完全匹配。但是有一个陷阱。如果tabindex
不当,您的脚本可能会失败,而不会向您提供任何其他选项,但会退回findElement()
。
从上面提到的要点 findElement()
与 sendKeys()
结合起来总是一个安全的选择。