2017-02-23 4 views
1

私は、このゲームに全く新しいですが、私は自動化:)文字列長エラー

私はセレンIDEでスクリプトを記録している時に私の手をしようとすることを決めたとC#に変換しているいくつかの時間のために、マニュアルテスターきた期待。スクリプトは、アカウントを作成し、ダミーのテストカードを追加し、現金をアカウントに入金することです。

は、私はC#についてはほとんど知っています。私はYouTubeのチュートリアルで基本を学んでいます。それは非常に高く評価されるだろう答えるとき、あなたが心の中でその裸ができれば、すべての人のお奨めは、ユニット・テスト・スクリプトを実行しようとしたとき、私は次のエラーを取得しています:)

どこか学びます。

Test Name:  TheVisaDebitRegistrationTest 
Test FullName: SeleniumTests.VisaDebitRegistration.TheVisaDebitRegistrationTest 
Test Source: c:\users\lee.davies\documents\visual studio 2015\Projects\UnitTestProject6\UnitTestProject6\UnitTest1.cs : line 44 
Test Outcome: Failed 
Test Duration: 0:00:14.862 

Result StackTrace: at SeleniumTests.VisaDebitRegistration.TheVisaDebitRegistrationTest() in c:\users\lee.davies\documents\visual studio 2015\Projects\UnitTestProject6\UnitTestProject6\UnitTest1.cs:line 52 
Result Message: 
Expected string length 55 but was 76. Strings differ at index 0. 
    Expected: "Registration | Sign up to Betfred.com | £25 Matched Bet" 
    But was: "Betfred online betting, sports, casino, games, poker and Bing..." 
    -----------^ 

[Test] 
public void TheVisaDebitRegistrationTest() 
{ 
    // open |/| 
    driver.Navigate().GoToUrl(baseURL + "/"); 
    // assertTitle | Betfred online betting, sports, casino, games, poker and Bingo | Betfred.com | 
    Assert.AreEqual("Betfred online betting, sports, casino, games, poker and Bingo | Betfred.com", driver.Title); 
    // click | link=Sign Up Now | 
    driver.FindElement(By.LinkText("Sign Up Now")).Click(); 
    // assertTitle | Registration | Sign up to Betfred.com | £25 Matched Bet | 
    Assert.AreEqual("Registration | Sign up to Betfred.com | £25 Matched Bet", driver.Title); 
+0

予想されるタイトルのページのURLを使用していない可能性があります。 –

+0

[how-to-ask]を見てください(http://stackoverflow.com/help/how-to-ask) – swe

答えて

1

テストは二Assert.AreEqualAssert.AreEqual("Registration | Sign up to Betfred.com | £25 Matched Bet", driver.Title);に失敗します。エラーメッセージが予想される正確な理由

を示しています:「登録| Betfred.comにサインアップ|£25マッチベット」
しかしだった:「Betfredオンライン賭け、スポーツ、カジノ、ゲーム、ポーカーやビンゴ| Betfred.com "

driver.Titleはまだ"Betfred online betting, sports, casino, games, poker and Bingo | Betfred.com"です。

0

それはあなたがAssert.AreEqualに入れ期待文字列が実際のものと同じではないことを述べています。あなたができることは、テストをデバッグし、実際の文字列を見て、これがバグかどうかを確認することです。

string actualResult = driver.Title; 
Debug.WriteLine(driver.Title); 

これらの行をコードに追加し、クリックデバッグを実行する代わりに、実際のタイトル全体が出力ウィンドウに表示されます。別の方法として、ブレークポイントを追加してtitleプロパティをホバーすることもできます。

1

ログアウトアクションが完了するまで待つ必要があります。

はSo、待つこと

driver.FindElement(By.LinkText("Sign Up Now")).Click(); 

One possible solution after waitをputです:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
wait.Until(ExpectedConditions.TitleIs("Registration | Sign up to Betfred.com | £25 Matched Bet")) 
0

問題は、タイトルが期待されたものと一致しませdoes because第二Assertがfailingされることです。 ExpectedBut wasは、比較対象と一致しなかった箇所(最初の文字)を示しています。

あなたに実行している問題は、セレンは、あなたが.GoToUrl()を使用しているとき以外は(一般的に)ロードするためのページを待たないだろうということです。あなたが調べることができる理由についての長い説明がありますが、基本的にSeleniumはページ上でどのようなアクションをとってページロードを引き起こすのか分からないため、ユーザーに待ってもらうために残しています。

この場合、ページ遷移前に2番目のAssertが実行されるため、Sign Upページタイトル(2ページ目)と現在のページ(1ページ目)タイトルを比較すると失敗します。これを解決するには、[サインアップ]ページが読み込まれるまで待つ必要があります。これを行うにはいくつかの方法があります。ページタイトルが変更されるのを待つことができます。

string signUpPageTitle = "Registration | Sign up to Betfred.com | £25 Matched Bet"; 
WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); 
wait.Until(ExpectedConditions.TitleIs(signUpPageTitle)); 
Assert.AreEqual(signUpPageTitle, Driver.Title,); 

また、サインアップページの一意の要素が存在するのを待つこともできます。

string signUpPageTitle = "Registration | Sign up to Betfred.com | £25 Matched Bet"; 
WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10)); 
wait.Until(ExpectedConditions.ElementIsVisible(By.Id("someId"))); 
Assert.AreEqual(signUpPageTitle, Driver.Title, "Validate title on sign up page"); 

一つさておき...私はあなたがテストしているものを示すために、Assert秒にコメントを追加することを示唆しています。後でデバッグするのに役立ちます。たとえば、

Assert.AreEqual("Registration | Sign up to Betfred.com | £25 Matched Bet", driver.Title, "Validate title on sign up page"); 
+0

ありがとうJeffC、これは治療を受けました:) –

+0

これを見つけたら任意の)答えが役に立つ、それをupvoteしてください。これがあなたの質問に答えた場合は、それを受け入れられた回答としてマークしてください。ありがとう! – JeffC