1

我正在使用 selenium 导航到页面并使用 Internet Explorer 截取屏幕截图。但问题是登录是由 Javascript 警报框处理的。现在 Selenium 有一个功能,可以通过使用 Alert 元素将焦点带到警报框,我已经设法带来焦点并在用户名文本框中输入一些值。

问题是 Selenium 没有将焦点切换到密码文本框,而是在同一个框中输入用户名和密码。我尝试使用 Java AWT Robot 单击 tab 键并更改焦点,但 Selenium 无法识别这一点,它继续在同一个框中输入用户名和密码。

下面是我的代码:

Robot robot = new Robot();
driver.get("the url");
Alert alert = driver.switchTo().alert();
alert.sendKeys("username");
robot.keyPress(KeyEvent.VK_TAB);
alert.sendKeys("password");
alert.accept();

我在这里想念什么?我的方法在这里正确还是我必须采取不同的路线?

4

5 回答 5

2

嗨 Madusudanan 通过注释另一种开关方法来尝试代码。

Robot robot = new Robot();
Alert alert=dr.switchTo().alert();
dr.get("the url");
alert.sendKeys("username");
//dr.switchTo().alert();
robot.keyPress(KeyEvent.VK_TAB);
alert.sendKeys("password");
alert.accept();
于 2013-03-21T10:00:53.707 回答
0

不是 Java 答案,但因为我发现这个问题正在寻找这个问题的 .net 答案。

如果您使用的是 .NET,则需要使用 SendKeys 而不是 Robot

using System.Windows.Forms;

        _driver.SwitchTo().Alert().SendKeys("Username");
        SendKeys.SendWait("{TAB}");
        SendKeys.SendWait("password");
        SendKeys.SendWait("{Enter}");

希望这对某人有帮助!

于 2013-09-17T17:25:26.430 回答
0

根据您的问题,在关注密码字段 Selenium WebDriver 后无法输入/输入/键入它的相应值。您可以使用 Robot 类键入密码值。以下是整个代码:

//First write a method to use StringSelection
public void setClipboardData(String string) {
            StringSelection stringSelection = new StringSelection(string);
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
    }

Robot robot = new Robot();
driver.get("Your URL");
Alert alert = driver.switchTo().alert();
alert.sendKeys("username");
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
//call setClipboardData method declared above
setClipboardData("Your Password");
//Copy Paste by using Robot class
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
alert.accept();
于 2016-04-29T10:18:54.277 回答
0

我从任何来源创建类似的代码并在添加后工作:a.keyRelease(KeyEvent.VK_ADD);

          // Initialize InternetExplorerDriver Instance.
          WebDriver driver = new InternetExplorerDriver();

          // Load sample calc test URL.
          driver.get("your homepage testing");

          //Code to handle Basic Browser Authentication in Selenium.
          Alert aa = driver.switchTo().alert();

          Robot a = new Robot();
          aa.sendKeys("beyond"+"\\"+"DND");  

          a.keyPress(KeyEvent.VK_TAB);
          a.keyRelease(KeyEvent.VK_TAB);
          a.keyRelease(KeyEvent.VK_ADD);                

          setClipboardData("P@ssw0rd");
          a.keyPress(KeyEvent.VK_CONTROL);
          a.keyPress(KeyEvent.VK_V);
          a.keyRelease(KeyEvent.VK_V);
          a.keyRelease(KeyEvent.VK_CONTROL);
          aa.accept();    private static void setClipboardData(String string)StringSelection stringSelection = new StringSelection(string);

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);

于 2016-08-24T04:34:11.390 回答
0

使用 java.awt.Robot 类有两个主要缺点。

  1. Mac 问题:在 Mac OS 上,当我们实例化 Robot 类时,Java 应用程序在后台启动并带走焦点(因此社区中的一些人发送 VK_META(Cmd 键)和 VK_TAB 以返回警报)。由于 Mac 的复制和粘贴快捷键不同,因此也需要处理(使用 VK_META 代替 VK_CONTROL)。

  2. Jenkins 或远程运行器问题:即使我们解决了上述问题,最终当从 Jenkins 作业运行测试时,机器人实例化再次成为问题(通过 jenkins 执行 Robotframework selenium 不起作用

幸运的是,sendKeys 可以处理 tab 键(作为扫描代码),下面的代码对我有用。

Alert alert = driver.switchTo().alert();
alert.sendKeys("username" + Keys.TAB.toString() + "password");
alert.accept();
于 2019-04-24T21:47:57.773 回答