2016-09-06 9 views
0

私はHTMLページを持っており、そのページのページオブジェクトを作成しました。このページには動的HTMLテーブルが含まれています。私はそれが動的に作成されるので、ページオブジェクトとして使用することができません。テストケースでは、ページの行と列を使用したいと思います。セレンのページfatoryを使用してページオブジェクトモデルの動的HTMLテーブルを処理する方法は?

ページオブジェクトクラス:!

public final class AgentsPage 
{ 
@FindBy(how=How.XPATH, using="//table[@id='gwt-debug-com.seamless.ers.client.agentPortal.client.view.screens.SubAgentsReportScreen']//input[@id='gwt-debug-Phone_Number']") 
public WebElement phoneNumber; 

public String getTextOfPhoneNumber() 
{ 
    return phoneNumber.getAttribute("value"); 
} 

public void setTextForPhoneNumber(String value) 
{ 
    phoneNumber.clear(); 
    phoneNumber.sendKeys(value); 
} 

@FindBy(how=How.XPATH, using="//table[@id='gwt-debug-com.seamless.ers.client.agentPortal.client.view.screens.SubAgentsReportScreen']//input[@id='gwt-debug-Name']") 
public WebElement name; 

public String getTextOfName() 
{ 
    return name.getAttribute("value"); 
} 

public void setTextForName(String value) 
{ 
    name.clear(); 
    name.sendKeys(value); 
} 

@FindBy(how=How.XPATH, using="//table[@id='gwt-debug-com.seamless.ers.client.agentPortal.client.view.screens.SubAgentsReportScreen']//input[@id='gwt-debug-Reseller_ID']") 
public WebElement resellerId; 

public String getTextOfResellerId() 
{ 
    return resellerId.getAttribute("value"); 
} 

public void setTextForResellerId(String value) 
{ 
    resellerId.clear(); 
    resellerId.sendKeys(value); 
} 

@FindBy(how=How.XPATH, using="//table[@id='gwt-debug-com.seamless.ers.client.agentPortal.client.view.screens.SubAgentsReportScreen']//input[@id='gwt-debug-Terminal_Serial']") 
public WebElement terminalSerial; 

public String getTextOfTermialSerial() 
{ 
    return terminalSerial.getAttribute("value"); 
} 

public void setTextForTerminalSerial(String value) 
{ 
    terminalSerial.clear(); 
    terminalSerial.sendKeys(value); 
} 

@FindBy(how=How.XPATH, using="//table[@id='gwt-debug-com.seamless.ers.client.agentPortal.client.view.screens.SubAgentsReportScreen']//select[@id='gwt-debug-Rows_Per_Page']") 
public WebElement rowsPerPage; 

public String getSelectedValueOfRowsPerPage() 
{ 
    Select select=new Select(rowsPerPage); 
    return select.getFirstSelectedOption().getText(); 
} 

public void setValueForRowsPerPage(String visibleText) 
{ 
    if(!(visibleText.equals("")||visibleText==null)) 
    { 
     Select select=new Select(rowsPerPage); 
     select.selectByVisibleText(visibleText); 
    } 
} 

public void setValueForRowsPerPage(int index) throws Exception 
{ 
    Select select=new Select(resellerId); 
    select.selectByIndex(index); 
} 

@FindBy(how=How.XPATH, using="//table[@id='gwt-debug-com.seamless.ers.client.agentPortal.client.view.screens.SubAgentsReportScreen']//button[@id='gwt-debug-submit_button']") 
public WebElement submit; 

public String getTextOfSubmit() 
{ 
    return submit.getText(); 
} 

@FindBy(how=How.XPATH, using="//table[@id='gwt-debug-com.seamless.ers.client.agentPortal.client.view.screens.SubAgentsReportScreen']//button[@id='gwt-debug-clear_button']") 
public WebElement reset; 

public String getTextOfReset() 
{ 
    return reset.getText(); 
} 

@FindBy(how=How.XPATH, using="//table[@id='gwt-debug-com.seamless.ers.client.agentPortal.client.view.screens.SubAgentsReportScreen']//button[@id='gwt-debug-nextPage']") 
public WebElement next; 

public String getTextOfNext() 
{ 
    return next.getText(); 
} 

@FindBy(how=How.XPATH, using="//table[@id='gwt-debug-com.seamless.ers.client.agentPortal.client.view.screens.SubAgentsReportScreen']//button[@id='gwt-debug-prevPage']") 
public WebElement previous; 

public String getTextOfPrevious() 
{ 
    return previous.getText(); 
} 

@FindBy(how=How.XPATH, using="//table[@id='gwt-debug-com.seamless.ers.client.agentPortal.client.view.screens.SubAgentsReportScreen']//button[@id='gwt-debug-lastPage']") 
public WebElement last; 

public String getTextOfLast() 
{ 
    return last.getText(); 
} 

@FindBy(how=How.XPATH, using="//table[@id='gwt-debug-com.seamless.ers.client.agentPortal.client.view.screens.SubAgentsReportScreen']//button[@id='gwt-debug-firstPage']") 
public WebElement first; 

public String getTextOfFirst() 
{ 
    return first.getText(); 
} 

@FindBy(how=How.XPATH, using="//table[@id='gwt-debug- com.seamless.ers.client.agentPortal.client.view.screens.SubAgentsReportScreen']//div[contains(text(),'Page:') and contains(text(),'/')]") 
public WebElement pageCount; 

public String getTextOfPageCount() 
{ 
    return pageCount.getText(); 
} 
//Need page objects for the dynamic html table 
} 

[ページの画像] [1]:http://i.stack.imgur.com/o94F0.png

私は私の中で、テーブルの行を反復処理するための任意のXPathまたは任意のループを使用したくありませんテストケース。私はAgentsPage.submitボタンのような他の静的なページオブジェクト要素のようにそれを使いたいだけです。これはどのように達成できますか?

たxPathなしまあ

答えて

0

あなたも、(うまくいけばCssSelectorsを使用することができますが、それは同じです)テーブルの必要な要素を見つけることはありません。

は、私はあなたがテーブルの行(<tr>タグ)が含まれますウェブ要素のリストを作成することをお勧め右のそれを行うようにしてください。このリストは@FindBy属性で初期化する必要があります。

次に、データ用の「取得」メソッドを作成することをお勧めします。例えば

public String getName(int row, int cell) 
{ 
    return theTable[row].findElement(By.xpath(".//td[" + cell + "]")).getText(); 
} 
+0

ありがとうございます。心から感謝する。 –

0

ストア行番号、電話番号、名前、などなど、独自のリストのようにwebelements。ストリームを使用してデータを文字列として簡単に取得できます。

@FindBy(xpath="xpath to the row number") 
private List<WebElement> rowNum; 

@FindBy(xpath="xpath to the phone number") 
private List<WebElement> phoneNum; 

他の2つについても同様です。データはページの順に並べられます。リストのインデックスを使用して簡単にデータにアクセスできます。

関連する問題