Selenium Java 一旦调用 driver.get(URL) 方法,客户端就不会取回控制权

Selenium Java Client is not getting back the control once driver.get(URL) method is invoked

driver.get("MyURL");
System.out.println("URL is opened");
executeAutoItScript(scriptFileLocation);

当我打开 URL 时,我弹出了一个需要身份验证的弹出窗口。 为了处理这个问题,我正在使用 AutoIt 脚本。但问题是第一个命令

(driver.get("MyURL");) 

被执行,Chrome将被打开并且 身份验证弹出窗口出现。我观察到第二行

 System.out.println("URL is opened");     

没有被执行。我调试了它并观察到

的下一行未得到控制
driver.get("MyURL"); 

它挂了 那里。我改变了 driver.get("MyURL");到 driver.navigate().to("MyURL");但 没有运气。谁能帮我解决这个问题。附件是 弹出屏幕截图。

发件人:http://selenium-python.readthedocs.io/navigating.html

WebDriver 将等待页面完全加载(即 onload 事件已触发),然后再将控制权返回给您的测试或脚本。值得注意的是,如果您的页面在加载时使用了很多 AJAX,那么 WebDriver 可能不知道它何时完全加载。如果您需要确保这些页面完全加载,那么您可以使用等待。

因此,在这种情况下,您的网页未完全加载,因为它需要身份验证。这是您可以做的

driver.get("MyURL");
executeAutoItScript(scriptFileLocation);
Thread.sleep(2000);// to wait for autoit script, you can also use other wait explicit wait
//Assert statement
System.out.println("URL is opened");

->首先定义驱动程序的页面加载时间。

->通过使用 try-catch 超时异常调用 url.

->之后使用机器人class按键事件或按键事件class输入认证详情

如果有任何疑问让我知道,请尝试以下问题:

driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);

try{
driver.navigate().to("yourURL");
}
catch(TimeoutException te){
System.out.println(te);
System.out.println("Line went to Upto that Link");

之后您可以继续验证弹出代码。

如果您有任何疑问,请告诉我。

根据您的代码试验和浏览器快照,浏览器客户端(即Google Chrome浏览器似乎) 没有将控制返回给 WebDriver 实例,随后 Selenium Java Client 无法实现'document.readyState' 的状态等于 "complete"。因此你的下一行代码都不是:

System.out.println("URL is opened");

正在执行,下一行中的 AutoIt 脚本 也没有:

executeAutoItScript(scriptFileLocation);

解决方案

根据您的问题,我们无法清楚地了解此 身份验证弹出窗口 的来源。也许在讨论 之后,您可以传递嵌入在 URL 中的 usernamepassword 如下:

driver.get("http://admin:admin123@MyURL");

这对我有帮助:

    InternetExplorerOptions options = new InternetExplorerOptions();
    options.setCapability("initialBrowserUrl", "about:blank");
    options.setPageLoadStrategy(PageLoadStrategy.NONE);

    WebDriver driver = new InternetExplorerDriver(options);
    driver.manage().deleteAllCookies();
    driver.manage().window().maximize();
    driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);

    driver.get(url);

//这里执行 AutoItScript