2015-11-04 23 views
0

我試圖去通過一個表格(ID =「campaignAllAvailableList」),並遍歷標題的列表: (xpath = .//*[@id='campaignAllAvailableList']/li/div/div/h3),看它是否與一個我想匹配。的Java,相對XPath查找的網頁元素

如果確實如此,那麼我點擊到相應的按鈕:

(的xpath = .//*[@id='campaignAllAvailableList']/li/div/div[3]/a

<div id="campaignListWrapper" class="campaignOverviewSectionBody campaignListing" style=""> 
 
<ul id="campaignAllAvailableList" class="campaignList" style="display: block;"> 
 
<li> 
 
<div class="timetableCard clearedGroup"> 
 
<div class="timetableCardHeader helpAnchor"> 
 
<h3 class="timetableCardTitle">November Campaign metaTitle</h3> 
 
<img class="helpIcon" src="/images/icons/info-icon.png"/> 
 
<div class="popUp helpPopUp"> 
 
</div> 
 
<div class="timetableCardBody"> 
 
<div class="timetableCardActionBar clearedGroup"> 
 
</div> 
 
</li> 
 
<li> 
 
<div class="timetableCard clearedGroup"> 
 
<div class="timetableCardHeader helpAnchor"> 
 
<h3 class="timetableCardTitle">qwe</h3> 
 
<img class="helpIcon" src="/images/icons/info-icon.png"/> 
 
<div class="popUp helpPopUp"> 
 
</div> 
 
<div class="timetableCardBody"> 
 
<div class="timetableCardActionBar clearedGroup"> 
 
</div> 
 
</li>

這是java代碼我現在:

public class PromotionsPage extends MainPageTemplate 
{ 
    @FindBy(xpath=".//*[@id='campaignAllAvailableList']/li/div") 
    List<WebElement> campaignTable; 

public PromotionsPage(WebDriver d) throws PageValidationException 
{ 
    super(d); 
} 

public void clickSpecificGetStartedButton(String metadataTitle) 
{ 

    for (WebElement el : campaignTable) 
    { 
     WebElement metadataTitleTextElement = el.findElement(By.xpath(".//div/h3")); 
     if (metadataTitle == metadataTitleTextElement.getText()) 
     { 
      WebElement getStartedButton = el.findElement(By.xpath(".//div[3]/a")); 
       getStartedButton.click(); 
      } 
     } 
    } 
} 

它失敗在「爲(WebElement EL:campaignTable)」,我認爲這是不讀campaignTable作爲List正確...

我試圖找到標題列表直接

@FindBy(xpath=".//*[@id='campaignAllAvailableList']/li/div/div/h3") 
List<WebElement> campaignTable; 

for (WebElement el : campaignTable) 
     { 
      System.out.println(el.getText()); 
} 

但這給了一個錯誤太多, java.lang.IllegalArgumentException異常:對象不是聲明類

+0

是什麼的問題是什麼呢?有什麼錯誤? –

+0

我只是在帖子中包含了錯誤 - 它在「for(WebElement el:campaignTable)」中失敗,我認爲它沒有正確讀取campaignTable作爲列表 – wahahabear

+0

請在問題中發佈相關的HTML而不是使用圖片。該圖像最終將無法訪問,然後這個問題將不太有用。 – JeffC

回答

-1

我固定它,但我仍然不知道爲什麼原來的代碼不工作

List<WebElement> campaignTable = driver.findElements(By.xpath(".//*[@id='campaignAllAvailableList']/li/div")); 
for (WebElement el : campaignTable) 
{ 
    String metadataTitle = el.findElement(By.xpath(".//div/h3")).getText(); 

    if (target.compareTo(metadataTitle)==0) 
    { 
     WebElement getStartedButton = el.findElement(By.xpath(".//div[3]/a")); 
     getStartedButton.click(); 
     break; 
    } 
}`` 
+0

看到'FindBy(xpath =「.//* [@ id ='campaignAllAvailableList']/li/div」) '不工作,你添加了'break' –

0

插入0123的實例單擊元素以從循環中退出。請看下圖:

public void clickSpecificGetStartedButton(String metadataTitle) 
{ 
for (WebElement el : campaignTable) 
{ 
    WebElement metadataTitleTextElement = el.findElement(By.xpath(".//div/h3")); 
    if (metadataTitle == metadataTitleTextElement.getText()) 
    { 
     WebElement getStartedButton = el.findElement(By.xpath(".//div[3]/a")); 
      getStartedButton.click(); 
      break; 
     } 
    } 
} 
} 
+0

它在'for(WebElement el:campaignTable)'行失敗,所以break不能真正幫助 – wahahabear