加入收藏 | 设为首页 | 会员中心 | 我要投稿 滁州站长网 (https://www.0550zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

放心 – 使用REST Assured检查HTML文档

发布时间:2020-12-30 15:12:21 所属栏目:资源 来源:网络整理
导读:我正在尝试使用 REST Assured检查我的服务器返回的HTML文档的某些属性.证明问题的 SSCCE如下: import static com.jayway.restassured.path.xml.config.XmlPathConfig.xmlPathConfig;import static org.hamcrest.CoreMatchers.is;import static org.junit.

我正在尝试使用 REST Assured检查我的服务器返回的HTML文档的某些属性.证明问题的 SSCCE如下:

import static com.jayway.restassured.path.xml.config.XmlPathConfig.xmlPathConfig;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import org.junit.Test;

import com.jayway.restassured.path.xml.XmlPath;

public class HtmlDocumentTest {

  @Test
  public void titleShouldBeHelloWorld() {
    final XmlPath xml = new XmlPath("<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">"
      + "<html xmlns="http://www.w3.org/1999/xhtml">"
      + "<head><title>Hello world</title></head><body></body></html>")
      .using(xmlPathConfig().with().feature("http://apache.org/xml/features/disallow-doctype-decl",false));
    assertThat(xml.get("//title[text()]"),is("Hello world"));
  }
}

现在,这个尝试以com.jayway.restassured.path.xml.exception.XmlPathException结束:无法解析由于所有可能的错误导致的XML文档,java.net.ConnectException:连接超过30秒左右后超时!

如果我使用xmlPathConfig().with().feature(…)删除该行,则当功能“http://apache.org/xml/features/disallow-doctype-”时,由于DOCTYPE不允许,测试会立即失败decl“设置为true ..

如果我从文档中删除doctype行,则解析成功,但测试因断言错误而失败,“预期:是”Hello world“但是:是< Hello worldnull>” – 然而,这是一个不同的问题,显然(但也可以自由地给出关于那个的说明……).无论如何,删除doctype不是我的选择.

那么,问题:如何使用REST Assured检查带有doctype的HTML文档的属性?它说in the documentation“REST Assured providers预定义了解析器,例如HTML,XML和JSON.”,但我似乎无法找到有关如何激活和使用该HTML解析器的任何示例!例如,没有类似XmlPath的“HtmlPath”类,并且超时异常非常令人费解……

解决方法

我检查了你的代码.问题是,Restassured的XmlPath不是Xpath,而是使用属性访问语法.如果您向示例HTML添加正文内容,您将看到您的XPath没有做太多.查询语言的实际名称是 GPath.以下示例有效,请注意CompatibilityMode.HTML的使用,它具有您需要的正确配置:
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.jayway.restassured.path.xml.XmlPath;
import com.jayway.restassured.path.xml.XmlPath.CompatibilityMode;

public class HtmlDocumentTest {

    @Test
    public void titleShouldBeHelloWorld() {
        XmlPath doc = new XmlPath(
                CompatibilityMode.HTML,"<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">"
                        + "<html xmlns="http://www.w3.org/1999/xhtml">"
                        + "<head><title>Hello world</title></head>"
                        + "<body>some body"
                        + "<div class="content">wrapped</div>"
                        + "<div class="content">wrapped2</div>"
                        + "</body></html>");

        String title = doc.getString("html.head.title");
        String content = doc.getString("html.body.div.find { it.@class == 'content' }");
        String content2 = doc.getString("**.findAll { it.@class == 'content' }[1]");

        assertEquals("Hello world",title);
        assertEquals("wrapped",content);
        assertEquals("wrapped2",content2);
    }
}

(编辑:滁州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读