我正在使用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();
我在这里缺少什么?我的方法在这里是正确的还是我必须采取不同的路线?
答案 0 :(得分: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();
答案 1 :(得分:0)
不是Java的答案,但是因为我发现这个问题正在寻找这个问题的.net答案。
如果您使用的是.NET,则需要使用SendKeys而不是Robot
using System.Windows.Forms;
_driver.SwitchTo().Alert().SendKeys("Username");
SendKeys.SendWait("{TAB}");
SendKeys.SendWait("password");
SendKeys.SendWait("{Enter}");
希望这有助于某人!
答案 2 :(得分: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();
答案 3 :(得分: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);
答案 4 :(得分:0)
使用java.awt.Robot类有两个主要缺点。
Mac问题: 在Mac OS上,当我们实例化Robot类时,Java应用程序将在后台启动并释放焦点(因此社区中的某些人正在发送VK_META(Cmd密钥)和VK_TAB以返回警报)。由于Mac上的复制和粘贴快捷键不同,因此也需要处理(使用VK_META代替VK_CONTROL)。
Jenkins或远程跑步者问题: 即使我们已经解决了上述问题,最终在詹金斯(Jenkins)的工作中进行测试时,机器人实例化仍然再次成为问题(Robotframework selenium execution through jenkins not working)
幸运的是,sendKeys可以处理tab键(作为扫描代码),下面的代码对我有用。
Alert alert = driver.switchTo().alert();
alert.sendKeys("username" + Keys.TAB.toString() + "password");
alert.accept();