2016-11-26 29 views
0

私はログイン機能を書いています。エラー/予期しない条件の場合にこの機能を正常に終了したいと思います。例:パスワードを入力するとき、フィールドが変更されているか存在していませんパスワードフィールドが存在しないというメッセージが表示されて関数を終了します。ファンクションステータスは「Fail」であり、正確なエラーメッセージでなければなりません。発生するかもしれない他の例外を処理するのと同じ方法です。この機能を正しく行うための正しい方法は何ですか、私はWebオブジェクトを扱う将来の機能でこのプラクティスに従うことができますか?Webdriver:ユーザー定義関数を書く正しい方法は何ですか

public boolean Login(String userName, String password, String url) 
    { 


     _driver= new FirefoxDriver(); 
     _driver.manage().window().maximize(); 
     _driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);  
     _driver.get(url); 
     _driver.findElement(By.Xpath(".//*[id='usename']")).sendKeys(userName); 
     _driver.findElement(By.Xpath(".//*[id='pword']")).sendKeys(password); 
     _driver.findElement(By.Xpath(".//*[id='btn']")).click(); 
     String title = _driver.getTitle(); 
     boolean pass; 
     if (title.toLowerCase().contains("homepage")) 
     { 
      pass=true; 
     } 
     else 
     { 
      Assert.fail("Manager home page not opened after login"); 
      pass=false; 

     } 
     return pass; 
    } 

答えて

1

ドライバの設定を削除して、関数からの初期URLに移動したいとします。あなたの機能はログインのみ... Login()と一致する必要があります。ページオブジェクトモデルを使用したい場合はLoginPageクラスがところで

public class LoginPage 
{ 
    WebDriver _driver; 

    public LoginPage(WebDriver driver) 
    { 
     _driver = driver; 
    } 

    public void Login(String userName, String password) 
    { 
     _driver.findElement(By.id("usename")).sendKeys(userName); 
     _driver.findElement(By.id("pword]")).sendKeys(password); 
     _driver.findElement(By.id("btn")).click(); 
    } 
} 

のように見えるだろうが、あなたがメインのスクリプトが

_driver = new FirefoxDriver(); 
_driver.manage().window().maximize(); 
_driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
_driver.get(url); 
LoginPage loginPage = new LoginPage(_driver); 
loginPage.Login(userName, password); 
Assert.assertTrue(_driver.getTitle().contains("homepage"), "Log in successful"); 

ようになり

ような何かをするだろう、私は変更しましたあなたのロケータはXPathの代わりにBy.id()を使用してください。テキストが含まれている要素を見つけるなど、XPathの使用を避ける必要があります。By.id()で始まり、By.cssSelector()を使用してください。これらの2つが機能しない場合は、XPathに戻ってください。 XPathは遅く、脆くなる可能性が高く、ブラウザでは一貫性のないサポートがあります。

+0

ありがとうございます。私は機能のログインでtry catchブロックを使用する必要がありますか? NoSuchElementExceptionをキャッチするには?それは良い練習か不要か? – JavaSeleniumNovice

+0

これは本当にあなたのスクリプトの設定方法に依存します。あなたが例外を捕まえたら何をするつもりですか?あなたはそれから回復できますか?もしそうなら、それをキャッチしたいかもしれません。あなたがそれから回復できない場合、例外をキャッチする唯一のことはもっと理解できるメッセージを出力することです。私は一般的に多くの例外をキャッチしませんが、それは本当に依存しています。 – JeffC

+0

この回答が役に立ったら、それをアップしてください。あなたの質問に答えた場合は、それを了承済みとしてマークすることを忘れないでください。 – JeffC

関連する問題