Java WebDriver-如何在不进行修改的情况下获取已打开的页面

Java WebDriver-如何在不进行修改的情况下获取已打开的页面,java,webdriver,robot,Java,Webdriver,Robot,我需要进入一个受保护的网站。 安全性要求用户名和密码,但需要Windows的图形组件(无web代码,例如上载文件) 为了跳过这一步,我编写了一个小的Awt.Robot,用于查找并验证“弹出”窗口 因此,我在预期状态下打开了一个网页 如何使用WebDriver从这种状态重新获得控制权 某种程度上: ​​驱动程序FirefoxDriver=新的FirefoxDriver(); driver.get(页面已打开,未进行修改和身份验证) 想法?绕过JS弹出窗口并不容易和直接,使用机器人解决方案很难。它在

我需要进入一个受保护的网站。 安全性要求用户名和密码,但需要Windows的图形组件(无web代码,例如上载文件)

为了跳过这一步,我编写了一个小的Awt.Robot,用于查找并验证“弹出”窗口

因此,我在预期状态下打开了一个网页

如何使用WebDriver从这种状态重新获得控制权

某种程度上:

​​驱动程序FirefoxDriver=新的FirefoxDriver();
driver.get(页面已打开,未进行修改和身份验证)


想法?

绕过JS弹出窗口并不容易和直接,使用机器人解决方案很难。它在远程浏览器等上不起作用

通过url发送用户名和密码,如
http://username:password@你的app.com
。你试过下面的方法吗

 String url = "http://username:password@your-app.com";
 driver.get(url);

要回答您的问题,无法控制现有的浏览器实例

一些讨论:


谢谢你,尼利斯,我有个主意。我为任何可能遇到同样困难的人写信。我的解决办法已经制定出来了​​非常简单,我实例化了我的驱动程序,就在get(url)之前,我运行了AWT。Robot现在是一个线程。这使我不必为driver.get(url)的阻塞属性而烦恼


希望能为Purus帮助某人,我会再试一次

如果我使用
WebDriver.driver.get(http://localhost/repository);绿色弹出窗口出现,仅此而已。这种方法永远不会结束(1)。这个邪恶的弹出窗口不是一个web组件(不是div、span、link等等),它只是一个操作系统组件(这里是Windows)。用WebDriver是不可能操作这个的

所以,就在
WebDriver.driver.get之前(http://localhost/repository);我使用了一个新类RobotHabile,它扩展了线程,并使用AWT.Robot。
AWT.Robot可以使用键盘,因此当邪恶弹出窗口出现时(绿色),线程1正在等待弹出窗口的验证,并且使用我的
RobotHabile Robot=new RobotHabile();
robot.start()

使用线程2,我可以按我的id,按tab切换到密码,按我的pwd,然后按enter(2)。机器人不会以id和pwd字段为目标。但由于弹出窗口已经有焦点,我只能用任何字符和制表键填充并输入。此时,邪恶弹出窗口被验证,线程1可以正常继续


为了便于您理解?

我刚刚尝试了@localhost/repository。web服务告诉我不需要进行身份验证,然后会出现一个弹出窗口。同样,我有一个问题,因为它不是编码的网络。然而,我能够通过一个机器人跳过这一步(AWT.robot),我仍然想知道这将如何解决这个问题?你能让我明白吗?好的,我试试看。我的问题有点特别:当我访问部署的war时,浏览器(而不是网页)会要求我输入id和pwd。但是没有web组件(OS组件),所以webDriver无法与交互。此外,driver.get(url)被阻塞。因此,我发现自己有一个弹出窗口来释放driver.get(url)方法。幸运的是,第一个字段(id)会自动获得焦点。因此,我使用了一个从Thread继承的类并实现了Awt.Robot,我在driver.get(url)之前启动()。机器人如何启动,稍等片刻,点击键盘,按“tab”,输入键盘密码,按“enter”,然后自杀。突然弹出窗口启用,我可以访问web(本地)站点和驱动程序。get(url)可以完成他的治疗。希望很清楚,真的很抱歉。我仍然无法理解其功能。
private boolean openBrowserOnPage() {
        try {
            driver = new FirefoxDriver();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

            // run the robot which extends Thread
            RobotHabile robot = new RobotHabile();
            robot.start();
            // Open the browser
            driver.get(url);
                // Wait for robot action
            while(robot.isAlive()){
                // not much, wait
            }

            return true;
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Erreur : Impossible de se connecter/acceder au service '" + url + "'");
        }
        return false;
    }