zoukankan      html  css  js  c++  java
  • HtmlUnit框架:新建窗口与在新窗口打开链接

    1. HtmlUnit简介

      HtmlUnit是HtmlUnit是“用于Java程序的无GUI浏览器”。
      它为HTML文档建模,并提供一个API,使您可以调用页面,填写表单,单击链接等,就像在“常规”浏览器中一样。
      它具有相当好的JavaScript支持(正在不断改进),并且即使在非常复杂的AJAX库中也可以工作,根据所使用的配置来模拟Chrome,Firefox或Internet Explorer。它通常用于测试目的或从网站检索信息。
      HtmlUnit不是通用的单元测试框架。它是一种特殊的模拟浏览器以进行测试的方法,旨在用于其他测试框架(如JUnit或TestNG)中。

    2. 新建窗口

      HtmlUnit新建窗口,就跟在浏览器中创建新窗口一样,可以新建空白窗口,也可以像->右键->“在新窗口中打开链接”一样打开新窗口。
      那问题来了,为什么要新建窗口?如果不新建窗口,就会在默认创建的唯一窗口中打开新链接,这样就覆盖了原来的页面内容,这对并发访问多个页面非常不利。

    2.1 新建空白窗口

    val newBlankWindow = webClient.openWindow(null, windowName="这里起一个窗口名称")
    

    2.2 在新窗口中打开链接

    val newWindow = webClient.openWindow(URL("在这里填入url"), windowName="这里起一个窗口名称")
    

    3. 获取指定窗口的Page

    val webRequest=object : WebRequest(URL(url)) {}
    val page = webClient.getPage<HtmlPage>(window, webRequest)
    

    4. 新建WebRequest对象中的问题

      在上面3.小节中,根据HtmlUnit源码,新建WebRequest对象时,URL对象是不可以为空的,如果强行设置为null,就会抛出空指针异常。也就是说必须传入有效的URL对象。如此一来,必须设置访问一个链接才能获取指定窗口的Page,这使得2.2小节中的功能变的没用:反正获取窗口的Page都需要明确指定这个窗口打开某个链接,那我设置的新窗口默认打开的链接还有意义吗?
      由此得出结论:每次新建窗口只需要新建空白窗口,“在新窗口中打开链接”是没有意义而且浪费资源的。

    5. 便捷地创建WebRequest和WebWindow对象

    //加入这两个函数即可便捷地创建WebRequest和WebWindow对象
    fun getWebRequest(url: String) = object : WebRequest(URL(url)) {}
    
    fun WebClient.getNewWindow(windowName: String): WebWindow = this.openWindow(null, windowName)
    
    //创建示例
    val webRequest = getWebRequest("填入URL")
    val window = webClient.getNewWindow("为新窗口起的名字")
    
    //然后就可以获取这个窗口的Page啦
    val page = webClient.getPage<HtmlPage>(window, webRequest)
    
  • 相关阅读:
    LeetCode 面试题56-l .数组中数字出现的次数
    此文件不能被打印.请尝试用正确的应用程序打开它,然后从那里打印
    SessionAttribute cannot be resolved to a type
    {转}onenote快捷
    linux目录结构
    【转】C#事件和委托的理解
    【转】微信小程序实现微信支付功能(可用)
    【转】mysql 用户及权限管理 小结
    使用FileWriter把文件写入 ,使用 File Reader把文件读出 到控制台
    Intellij IDEA 中 使用 Git
  • 原文地址:https://www.cnblogs.com/soclear/p/14127479.html
Copyright © 2011-2022 走看看