Selenium2(WebDriver)_如何判斷WebElement元素物件是否存在

賀滿發表於2013-12-25

1. selenium中如果去尋找元素,而元素不存在的話,通常會丟擲NoSuchElementException 導致測試失敗,但有時候,我們需要去確保頁面元素不存在,才是我們正確的驗收條件下面的方法可以用來判定頁面元素是否存在

 1 public boolean doesWebElementExist(WebDriver driver, By selector)
 2 { 
 3 
 4         try 
 5         { 
 6                driver.findElement(selector); 
 7                return true; 
 8         } 
 9         catch (NoSuchElementException e) 
10         { 
11                 return false; 
12         } 
13 }         

 

2.一般有這樣的應用場合,例如我們要驗證在一個網站是否登入成功,那麼可以通過判斷登入之後是否顯示相應元素: 

WebElement linkUsername = driver.findElement(By.xpath("//a[contains(text(),"+username+")]"));

return linkUsername.isDisplayed();
 
這一方法的前提是:該元素之前已經存在,僅僅需要判斷是否被顯示。
 
現在存在另一種場合,頁面元素並不存在,即通過driver.findElement只能在超時之後得到NoSuchElementException的異常。
 
因此只好通過如下方法解決:
 1 boolean ElementExist (By Locator )
 2 {
 3   try
 4   {
 5     driver.findElement( Locator );
 6     return true;
 7   }
 8   catch(org.openqa.selenium.NoSuchElementException ex)
 9   {
10       return false;
11   }
12 }

 但這一方法仍然不理想,有這樣兩個問題: 

1、這一方法不屬於任何一個page頁,因此需要額外進行框架上的變更以支援這些功能函式,否則就必須在每一個用到該函式的page類寫一遍。 
2、仍然需要等到超時才能得知結果,當需要頻繁使用該函式的時候會造成相當的時間浪費。
 
3.
類似於seleniumRC中的isTextPresent 方法 
用xpath匹配所有元素(//*[contains(.,'keyword')]),判斷是否存在包含期望關鍵字的元素。 
使用時可以根據需要調整引數和返回值。 
 1 public boolean isContentAppeared(WebDriver driver,String content) {  
 2       boolean status = false;  
 3       try {  
 4           driver.findElement(By.xpath("//*[contains(.,'" + content + "')]"));  
 5           System.out.println(content + " is appeard!");  
 6           status = true;  
 7       } catch (NoSuchElementException e) {  
 8           status = false;  
 9           System.out.println("'" + content + "' doesn't exist!"));  
10      }  
11      return status;  
12  }  

詳細xpath介紹請見:http://www.w3school.com.cn/xpath/

  
4. Xpath 多重判斷 
1 while(currentPageLinkNumber<MaxPage)
2 {
3   WebElement PageLink;
4   PageLink = driver.findElement(By.xpath("//a[@class = 'PageLink' and @title ='"+Integer.toString(currentPageLinkNumber+1)+"']"));
5   PageLink.click();
6   currentPageLinkNumber++;
7 //OtherOperation();
8 }

 

 
 
轉自:http://blog.csdn.net/aerchi/article/details/8057544
 

相關文章