我有一个Selenium测试需要从Web服务器获取一些原始XML。我遇到的问题是,已知其中一个XML文档无效,因为它缺少根元素。我想获得无效XML的原始来源并使用我自己的根元素,但是我尝试解析XML并返回某种形式的错误消息时,每个WebDriver
的味道都是如此。简而言之,我这样做:
WebDriver driver = new FirefoxDriver();
driver.get("http://some_URL_that_returns_xml_data");
String source = driver.getPageSource();
source
字符串表示在浏览器中呈现的无效XML错误消息,而不是实际的原始源,就像我在浏览器中查看源一样。
有没有人知道解决这个问题的伎俩?
答案 0 :(得分:1)
执行此操作的标准方法是使用Apache HttpUtils包,并在HTTP请求中,只需按下正确的Content-Type标头,该标头可能是 application / xml 。然后,您的响应将由浏览器呈现为xml,而不是text或html。
如果XML无效,浏览器可能只呈现文档的一部分,因此如果您想要所有文本,您可能希望在请求中发送内容类型的文本。
答案 1 :(得分:0)
如果XML的唯一问题是缺少包装器元素,那么它是一个格式良好的外部解析实体",您可以使用实体引用来检索它。创建一个这样的虚拟文档:
<!DOCTYPE doc [
<!ENTITY e SYSTEM "http://uri.com/realdata.xml">
]>
<doc>&e;</doc>
(&#34; SYSTEM&#34;之后的字符串是XML的位置),并将此虚拟文档传递给XML解析器。 (但不是在浏览器中,XML解析器通常忽略外部实体)。
答案 2 :(得分:-1)
尝试:
WebElement element = driver.findElement(By.tagname("body"));
String elHtml = element.getAttribute("innerHTML");
OR:
String elHtml = driver.findElement(By.tagName("body")).getText()