2013-02-25 60 views
0

我想從網頁中提取所有輸入字段與他們的標題和元素的細節,並把它們放在一個HashMap中,以便以後在像JUnit測試WebDriver - 無法找到元素,提取網頁輸入字段

這是測試類中的示例代碼:

accountDetails.chooseField("Date of Birth"); 
accountDetails.changeValueTo(dateOfBirth); 

這就是網頁的源文件的一部分。我試圖讓標籤名稱爲「輸入」的所有字段。不幸的是,同時運行測試,我發現了以下硒錯誤:

org.openqa.selenium.NoSuchElementException: Unable to locate element: **{"method":"tag name","selector":"input"}

<tbody> 
    <tr> 
    <tr class="subtitle"> 
    <tr> 
    <tr class="subtitle"> 
    <tr> 
    <tr class="subtitle"> 
    <tr> 
    <tr> 
    <td class="caption">Staff Member</td> 
    <td> 
    <input id="StaffMember" type="text" maxlength="6" size="6" value="" name="StaffMember"> 
    </td> 
    <tbody> 

這就是提取類:

public class AccountDetails { 

    WebDriver driver; 
    WebElement accountDetailsTable; 
    WebElement radioButton; 

    HashMap<String, WebElement> fields = new HashMap<String, WebElement>(); 
    WebElement addCustomerButton; 

    public AccountDetails(WebDriver driver) { 
     this.driver = driver; 
     driver.switchTo().defaultContent(); 
     driver.switchTo().frame(driver.findElement(By.name("officePane"))); 
     driver.switchTo().frame(driver.findElement(By.name("MainArea"))); 
     accountDetailsTable = driver.findElement(By.tagName("tbody")); 
     addCustomerButton = accountDetailsTable.findElements(By.className("btn_def")).get(0); 

     List<WebElement> tr = accountDetailsTable.findElements(By.tagName("tr")); 

     for (WebElement el : tr) { 
      List<WebElement> td = el.findElements(By.tagName("td")); 
      if (td.size() > 0) { 
       fields.put(td.get(1).getText(), td.get(0).findElement(By.tagName("input"))); 
      } 
     } 
    } 
+0

只是好奇,在webelements存儲會導致staleelementexceptions。無論如何,你不需要再次找到這個元素。 – 2013-02-26 17:11:55

回答

0

我看到你已經在過去的TR兩款TD的。 td.get(1).findElement(By.tagName("input"))將會給出正確的結果。

1

要捕獲所有輸入,我平時做這樣的:

List<WebElement> inputList = driver.findElements(By.xpath("//input")); 

在您使用這樣的(愚蠢爲例:d):

void showInputValue (List<WebElement> c) { 
    for (WebElement e : c){ 
     Systeme.println(e.getAttribute("value")); 
    } 
}