Selenium2(WebDriver)_WebElement要素オブジェクトが存在するかどうかを判断する方法

6985 ワード

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 }

しかし、この方法は依然として理想的ではありません.このような2つの問題があります.
1、この方法はいずれのpageページにも属しないため、これらの機能関数をサポートするためにフレームワーク上の変更を追加する必要があります.そうしないと、その関数を使用するpageクラスごとに1回書く必要があります. 
2、結果を知るにはタイムアウトまで待つ必要があり、この関数を頻繁に使用する必要がある場合、かなりの時間の無駄になります.
 
3.
seleniumRCのisTextPresentメソッドと同様
すべての要素(//*[contains(.,'keyword')])をxpathでマッチングし、所望のキーワードを含む要素が存在するか否かを判断する. 
必要に応じてパラメータと戻り値を調整できます. 
 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