2015-09-09 98 views
0

我在Java Selenium Webdriver中動態生成一個HTML文件。 HTML文件有兩個div標籤,每個標籤都有自己唯一的id屬性。如何將HTML文本附加到Java中的div標記中

我想動態地添加HTML文本到這些div標記根據他們的id在稍後的代碼中。

這可以實現嗎?如果是的話,有人可以指出我正確的方向如何實現這一目標?如果否,那麼實現這一目標的另一種方法是什麼?

我正在努力解決這種情況。我真的需要能夠動態地將數據附加到基於div標籤的HTML頁面。

在此先感謝!

public void createsummaryfile(String report,String path) throws IOException{    
    File summary;  
    summary = new File(filepath); 
    if(!summary.exists()){ 
     summary.createNewFile(); 
    } 
    BufferedWriter bw = new BufferedWriter(new FileWriter(summary)); 
    bw.write("<!DOCTYPE html>"); 
    bw.write("<html><head><h1 align=center>EDC Reports Test Case Execution Summary</h1>"); 
    bw.write("<style>#report_table{height: 300px;left: 1em;position: relative;top: 5em;width: 300px;}#report{height: 300px;left: 20em;position: relative;top: -15em;width: 300px;}</style></head>"); 
    bw.write("<body><div id=report_table><table align=center border=1><tbody><tr><th>Report Name</th></tr></div>"); 
    bw.write("<body><div id=report_display></div>"); 
    bw.write("</html>");   
    bw.close(); 
} 

public void populate_summary(String report,String path) throws IOException{  
    File summary_report = new File(filepath); 
    BufferedWriter br = new BufferedWriter(new FileWriter(summary_report,true));   
    //Here I need to access the div tags by their id's and start appending data  
} 
+1

您需要展示迄今爲止所做的工作。 – jgabb

+0

截至目前,我在Java中有兩種方法,一種是使用基本佈局創建HTML文件的方法,另一種方法是將數據動態附加到該HTML文件。 我想了解,如果我可以用第二種方法以其獨特的ID訪問div標籤,並開始在div標籤內附加數據或其他標籤。 –

+0

@jgabb請參考上面的代碼片段 –

回答

0

尋找你的HTML文檔中一個div - 標籤與特定的ID通過創建並通過DOM樹搜索是可能的。

首先,你需要創建文檔的DOM表示:

public static String addToDivWithID(String htmlDocPath, String divID, String dataToAppend) 
     throws ParserConfigurationException, IOException, SAXException, TransformerException { 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Document doc = builder.parse(htmlDocPath); 

    Element elementWithID = findDiv(divID, doc.getDocumentElement()); 

    Element contentToAppend = builder 
      .parse(new ByteArrayInputStream(dataToAppend.getBytes())) 
      .getDocumentElement(); 

    elementWithID.appendChild(contentToAppend); 

    return domToString(doc); 
} 

在這個例子中,我用這個方法來找到所需div - 元素: 它執行遞歸查詢(實施可以看看

01:好一點)

public static Element findDiv(String id, Element element) { 

    if(id.equals(element.getAttribute("id"))) { 
     return element; 
    } 

    NodeList innerDivs = element.getElementsByTagName("div"); 

    for(int i = 0; i < innerDivs.getLength(); i++) { 
     Element current = (Element) innerDivs.item(i); 

     if(id.equals(current.getAttribute("id"))) { 
      return current; 
     } 

     Element possibleChildWithID = findDiv(id, current); 

     if(possibleChildWithID != null) { 
      return possibleChildWithID; 
     } 
    } 

    return null; 
} 

找到正確的元素後,您可以用這些線(已在第一種方法)添加新內容

Element contentToAppend = builder 
      .parse(new ByteArrayInputStream(dataToAppend.getBytes())) 
      .getDocumentElement(); 

有關將XML字符串附加到DOM元素here的更多信息,

然後,你要這樣改變你的DOM文檔返回到其字符串表示:關於轉化DOM的文檔串here

public static String domToString(Document doc) throws TransformerException { 
    TransformerFactory tf = TransformerFactory.newInstance(); 
    Transformer transformer = tf.newTransformer(); 
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
    StringWriter writer = new StringWriter(); 
    transformer.transform(new DOMSource(doc), new StreamResult(writer)); 
    String output = writer.getBuffer().toString().replaceAll("\n|\r", ""); 

    return output; 
} 

更多信息。

最後,我個人關心的是,我不應該這樣處理你的HTML文檔! 如果你想在特定的div添加內容,使用JSP在服務器端是這樣的:

<html> 
    <body> 
     <div id="first"> 
      <% 
       String first = Foo.getFirstDivStuff(); 
      %> 
      <%= first %> 
     </div> 
     <div id="second"> 
      <% 
       String second = Foo.getSecondDivStuff(); 
      %> 
      <%= second %> 
     </div> 
    </body> 
</html> 

如果你要修改的已經做了它的方式給客戶端的HTML內容,使用AJAX和服務器上正確的JSP或Servlet。

相關問題