2016-06-21 17 views
1

私はC#で書かれたSelenium Webdriverを数ヶ月前から使用しています。ここに私のシナリオがあります。私は現在、Webベースのブラウザ製品のUIをテストしています。問題は、一度に多くのユーザーをテストし、サーバーのメモリなどを監視する必要があることです。サーバーの負荷テストに過去にjMeterを使用しましたが、できるだけ多くのユーザーと同様のことを行うためにセレンを使用したいと思います。C# - Selenium Webdriver - ヘッドレスブラウザ - ユニットテスト - 基本

私は、Seleniumと組み合わせてヘッドレスブラウザを使用してこれを実現できるかもしれないことを理解しています(認識していない人は、複数のブラウザを読み込むとマシンのメモリが枯渇する傾向があり、6/7ブラウザ同時に)

私は、ヘッドレスブラウザを使用して、私はすぐに行くことができますいくつかを参照します。私の研究は、これを達成するためにシンプルブラウザーとセレンを使用できると信じています。

これらの2つの組み合わせの例を見つけるのは難しいです。だから私の最初の質問は、これがヘッドレスブラウザであれば、ページ要素が実際に存在するのか、それともクライアントとサーバーの間で送信される要求だけなのでしょうか?私は、ページ上の要素を見つけるために、セレンを使用する場合

例えば、私が書くでしょう

IWebElementユーザ名= driver.FindElement(By.XPath( "//入力[ID = 'MainContent_txtUsername' @]") ); username.SendKeys(userUserName);

私はこれをユニットテストにも同じように書いており、合格したと言います。しかし、パスワードを送信してログインボタンをクリックすると、次のTestMethodを渡すことができません。すなわち、ログイン後、私は値 "Change Company Password"のボタンを見つけることを期待する。

私の質問は、ヘッドレスブラウザでは、これらの要素はまったく存在するのか、それともどのように機能するのでしょうか?このユニットテストは成功しません。もしそうなら、どうすればログインボタンをクリックするのですか?おかげでみんな

ここでは私のコードです:

[TestMethod] 
     public void AddPhoneToCartAndVerifyInCart() 
     { 
      //This is the placeholder to write actual code. 
      Assert.AreEqual(" SPC Connect ", driver.Title); 
     } 
     [TestMethod] 
     public void LogIn() 
     { 
      Assert.IsTrue((driver.FindElement(By.XPath("//input[@class='btn btn-info']")).Text).Contains("Login")); 
      IWebElement username = driver.FindElement(By.XPath("//input[@id='MainContent_txtUsername']")); 
      username.SendKeys(userAccount); 
      IWebElement password = driver.FindElement(By.XPath("//input[@id='MainContent_txtPassword']")); 
      password.SendKeys(userPassword); 
      IWebElement clickSubmit = driver.FindElement(By.XPath("//input[@class='btn btn-info']")); 
       clickSubmit.Click(); 

     } 
     [TestMethod] 
     public void LogInSuccess() 
     { 
      Assert.IsTrue((driver.FindElement(By.XPath("//input[@id='MainContent_btnChangeCompanyPassword']")).Text).Contains("Change Company Password")); 

     } 

答えて

1

はい、これらの要素は、まだヘッドレスブラウザに存在します。正しく設定した場合は、テストを変更する必要はありません。ここ は(私はのStructureMapとそれをすべてアップ配線、代わりにSimpleBrowserのPhantomJSを使用してきた - しかし、原則は多かれ少なかれ同じでなければなりません)のサンプルです:

For<IWebDriver>().Use(() => 
{ 
    var options = new PhantomJSOptions(); 
    options.AddAdditionalCapability("javascriptEnabled", true); 
    options.AddAdditionalCapability("unexpectedAlertBehaviour", "accept"); 
    options.AddAdditionalCapability("handlesAlerts", true); 
    options.AddAdditionalCapability("databaseEnabled", true); 
    options.AddAdditionalCapability("applicationCacheEnabled", true); 
    options.AddAdditionalCapability("locationContextEnabled", true); 
    options.AddAdditionalCapability("webStorageEnabled", true); 
    options.AddAdditionalCapability("acceptsSslCerts", true); 
    options.AddAdditionalCapability("browserConnectionEnabled", true); 
    return new PhantomJSDriver(options); 
}); 
関連する問題