【问题标题】:Selenium Java Client is not getting back the control once driver.get(URL) method is invoked一旦调用了 driver.get(URL) 方法,Selenium Java 客户端就不会取回控制权
【发布时间】:2018-07-25 18:51:19
【问题描述】:
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");但 没有运气。谁能帮我解决这个问题。附件是 弹出的屏幕截图。

【问题讨论】:

  • 我认为这是一个 JavaScript 窗口而不是弹出窗口,但我不确定。
  • 你能检查警报是否存在吗?如果它返回true那么它是JavaScript弹出而不是窗口弹出,一旦我们知道它是JavaScript弹出我们就可以轻松解决这个问题。
  • 投反对票的人可以解释为什么这个问题被投反对票!我看到这个问题是完全有效的问题。

标签: java selenium selenium-webdriver webdriver basic-authentication


【解决方案1】:

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

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

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

executeAutoItScript(scriptFileLocation);

解决方案

从您的问题中不清楚此身份验证弹出窗口的来源。也许在Selenium - Basic Authentication via url 的讨论之后,您可以传递嵌入在 URL 中的 usernamepassword,如下所示:

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

【讨论】:

    【解决方案2】:

    发件人: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");
    

    【讨论】:

    • 与等待问题无关。我已经在调试模式下使用代码,并且 driver.getURL() 没有将控制权交给下一行。
    【解决方案3】:

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

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

    ->之后使用机器人类按键事件或按键事件类输入认证细节

    如果有任何疑问,请尝试以下方法:

    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");
    

    在此之后,您可以继续使用身份验证弹出代码。

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

    【讨论】:

      【解决方案4】:

      这对我有帮助:

          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

      【讨论】:

        猜你喜欢
        • 2012-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-12
        • 1970-01-01
        相关资源
        最近更新 更多