2015-08-24 49 views
0

如何將一個確認頁面上的下列文本字段存在:驗證實際文本值VS預期的許多領域 - 硒

名稱 姓 DOB ActionNumber 的PageNumber

它們都擁有ID屬性的字段名稱。

其他比使用(Pysdo代碼)

String ActualSurnameText = driver.findElement(By.ID("Surname")).getText(); 
If ActualSurnameText = ExpectedSurnameText then Pass else fail 

是其一個smater更有效的方式

EDIT

也許應該提到,每個標籤嵌套在一個div所以結構像

<div class="top"> 
<div class="middle"> 
    <div class="lower"> 
    <label class="lable"> 
    <div class="bottom"> 
    <input> 

編輯 所以目前我已經declaired數組

String[] ExpectedFieldNAme = new String[4] 
ExpectedFieldName[0] = "Name"; 
ExpectedFieldName[0] = "Surname"; 
ExpectedFieldName[0] = "DoB"; 
ExpectedFieldName[0] = "ActionNumber"; 
ExpectedFieldName[0] = "PAgeNumber"; 

<need to code for a loop that pysdo goes> 
For (int i = 0, i < div.size(); i++){ 
does div.label.text = anything value in ExpectedFieldName; 
print yes it does} 
print no it doesnt 
repeat untill all the div labels have been identified` 
+0

如果該字段不存在,findElement將引發異常並且您的測試失敗。你不需要做一個'getText'並驗證它。 – KDM

+0

@KDM如果元素存在但不包含您期望的文本會怎麼樣?這就是爲什麼您需要執行'.getText()'並驗證包含期望的文本。 – JeffC

+0

@JeffC我認爲需求是尋找元素的存在.. – KDM

回答

-1

回答你的問題如何將一個確認頁面上的下列文本字段存在: 以下命令將返回唯一如果您的頁面包含您的期望文本。如果返回

assertTrue(driver.getPageSource().contains("Text-you-are-Looking-for")); 

執行將停止。建議明智地使用它。

+0

@Jeff我的回答更精確地說是關於一個頁面而不是一個特定的web元素。請檢查問題的第一行。當你知道特定的Web元素時,getText()會起作用,如果你的頁面包含多於100個WebElement,該怎麼辦?你會爲所有100個元素使用GetText()嗎? –

+0

......他說,「它們都有字段名稱的ID屬性」,所以不,你不會搜索整個網頁的文本,你會通過ID找到元素,然後執行'.getText() '。他也沒有說有100個元素,他列出了他需要的5個元素。在任何體面大小的網頁中,都有超過100個元素......這就是爲什麼有所有不同的查找方法可以快速縮小搜索範圍。 – JeffC

0

有許多庫已經存在來做這樣的驗證。我建議你閱讀幾個並嘗試一些,找到你喜歡的一個。 TestNG,JUnit是一對流行的,但也有其他的。

使用TestNG有許多驗證功能。例如,比較兩個字符串

assertEquals("Verify name", ExpectedSurnameText, ActualSurnameText); 

我明白你正在嘗試做的,它似乎「更好」,更少的代碼,做這樣的說法,但它不是更好。更好的驗證方法是查找期望防止誤報的預期文本。一個簡單的例子可能有幫助假設您正在搜索文本「DOB」,這是一個字段標籤。你搜索整個頁面的文字。如果您在頁面的其他地方有說明,請說明「請輸入您的DOB」。有一天,字段標籤文本消失了,但腳本仍然在頁面上找到「DOB」,因爲它與指令文本而不是標籤匹配。這是在預期的地方不尋找預期文本的危險。你想要做的是這樣的

// assume expected text variables are defined earlier in the test 

// Name 
String ActualName = driver.findElement(By.id("Name")).getText().trim(); 
assertEquals("Verify name", ExpectedName, ActualName); 

// Surname 
String ActualSurname = driver.findElement(By.id("Surname")).getText().trim(); 
assertEquals("Verify Surname", ExpectedSurname, ActualSurname); 

這只是2的每場行代碼,你是不是會得到比用數組更好,因爲你還要做驗證(1號線)並且您必須加載數組(1+行)

+0

我想成功的是:代替 'assertEquals(「Verify name」,ExpectedSurnameText,ActualSurnameText)';頁面上每個標籤20次;有一個FOR LOOP(?)可以說 對於(DIV(Class = Lower)中的每個標籤),我的預期文本是否與ActualText相匹配。因此,某種類型的數組可以保持預期 - 但這都是新的對我... – xTNAx

+0

我不明白你的說法。 – JeffC

+0

好吧,讓我們試試這種方式:類似於@Rupesh Shinde所說的關於在頁面上有許多標籤,你不會想要爲每個labl進行完整的代碼編寫,而是有一個循環來說明頁面上的每個標籤並執行它匹配我的數組中的任何值? – xTNAx