如何阅读页面中嵌入的xml?我想比较xml结构中出现的exportid的值?

时间:2014-04-25 15:01:28

标签: xml selenium

问题是我在页面中嵌入了一个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> `

1 个答案:

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