问题是我在页面中嵌入了一个xml,当我执行一个页面源时,xml不存在于我得到的结果字符串中。我正在使用Java与selenium webdriver 2.40。使用IEDriver。 我想阅读iframe中间及其内容。 xml有oa:Showconsumer id,需要从xml获取exportid和consumer id。
我们如何将xml导入xml结构?为什么pagesource没有记录这些细节?如果有人能解释我们如何在这个html结构中读取xml,那将会很棒。还有多个框架使其变得困难
我发布了来源
`<html>
<head>
<body style="overflow: hidden;" leftmargin="0" bottommargin="0" topmargin="0" rightmargin="0">
<table width="100%" cellspacing="0" cellpadding="0">
<tbody>
<tr style="height:43px;">
<tr style="height:25px;">
<tr>
<td colspan="2">
<iframe id="content" width="100%" scrolling="no" height="138" frameborder="0" src="content_default.html" marginheight="0" marginwidth="0" name="content">
<html>
<head><body onload="setDirtyOnChangeEvent(true);resizeContent();setHelpFile('4.htm');resizeMenuDiv();">
<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" bgcolor="E4DbD8">
<td rowspan="2">
<td style="width: 100%; vertical-align: top;" rowspan="2">
<iframe id="ifrm" class="rande" width="100%" scrolling="auto" height="100%" frameborder="0" src="emma_default.jsp" marginheight="0" marginwidth="0" name="ifrm">
<html>
<head>
<body onunload="onUnLoadTable();" onload="resize();setReadOnly(false);setDirtyOnChangeEvent(true);doFocus();showExtWindow();">
<form action="/emma/mmaXmlOutputDetail.do" method="post" name="xmlMessageForm">
<input type="hidden" value="" name="status">
<input type="hidden" value="" name="editId">
<input type="hidden" value="doNothing" name="task">
<input type="hidden" value="-1" name="dbKey">
<input type="hidden" value="searchXmlMessage.do?task=doBackToSearchPage&formCacheId=searchXmlMessageForm" name="cancelPath">
<input type="hidden" value="1300400" name="messageNumber">
<input type="hidden" value="" name="recordsFlag">
<input type="hidden" value="" name="xmlFlag">
<input type="hidden" value="true" name="outputXmlFlag">
<input type="hidden" value="" name="preXmlFlag">
<table class="layoutTable">
<table class="layoutTable">
<script type="text/javascript">
<span class="errorText">
<script type="text/javascript">
<input type="hidden" value="true" name="allMessages">
<input type="hidden" value="" name="searchFormCacheId">
<div id="table_div" class="content_div" style="height: 877px; overflow: auto;">
<iframe id="middle" width="100%" height="100%" frameborder="0" src="showXML.do?task=doShowOutputXml&messageNumber=1300400" marginheight="0" marginwidth="0" name="xml">
<html>
<head>
</head>
<body>
<showconsumer xsi:schemalocation="http://www.ford.com/oagis ../../../Ford/BODs/ShowConsumer.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oa="http://www.openapplications.org/oagis" xmlns="http://www.ford.com/oagis" revision="6.2" environment="Production">
</body>
<oa:applicationarea>
<oa:sender>
<oa:logicalid>Volvo</oa:logicalid>
<oa:component>CDB</oa:component>
<oa:task>ExportConsumer</oa:task>
<oa:authorizationid>CDB</oa:authorizationid>
</oa:sender>
<oa:creationdatetime>2014-04-25T12:53:49Z</oa:creationdatetime>
<oa:bodid>0A7F110A-545D-D59F-98F2-F03D98F2F03D</oa:bodid>
</oa:applicationarea>
<dataarea>
<oa:show>
<metadata>
<exportid>160574</exportid>
</metadata>
<consumer>
<consumerheader>
<source></source>
DE
<oa:documentid> </oa:documentid>
</consumerheader>
<consumerdetails category="Person">
<id type="ConsumerId">42202199</id>
<id type="GlobalConsumerId">7230010</id>
<vehiclerelation type="Drives">
<startdate>2014-04-15</startdate>
<enddate>
<changecyclemonthly>
<changecyclemileage>
</changecyclemonthly>
</enddate>
</vehiclerelation>
</consumerdetails>
</consumer>
</oa:show>
</dataarea>
</showconsumer>
</body>
</html>
</iframe>
</div>
<table>
</form>
</body>
</html>
</iframe>
</td>
</tr>
</tbody>
</table>
</body>
</html>
</iframe>
</td>
</tr>
</tbody>
</table>
</body>
</html> `
答案 0 :(得分:0)
您不能依赖getPageSource
方法。来自文档。
getPageSource
java.lang.String getPageSource()
获取上次加载的页面的来源。如果页面已被修改 加载后(例如,通过Javascript),无法保证 返回的文本是修改后的页面的文本。请咨询 用于确定是否的特定驱动程序的文档 返回的文本反映页面或文本的当前状态 最后由Web服务器发送。返回的页面源是 底层DOM的表示:不要指望它被格式化 或者以与从Web服务器发送的响应相同的方式进行转义。 把它想象成艺术家的印象。
返回: 当前页面的来源
无论如何,它不是在阅读它,因为它在iframe
内。你必须沿着iframe走下去,然后尝试读取元素值。像(包括拼写错误,从我头顶写的):
WebElement content = driver.findElement(By.id("content"));
driver.switchTo.frame(content);
WebElement ifrm = driver.findElement(Byid("ifrm"));
driver.switchTo.frame(ifrm);
WebElement middle = driver.findElement(By.id("middle"));
driver.switchTo.frame(middle);
// Ok, got the element, try to get the source:
String middleSource = middle.getAttribute("innerHTML");