2017-07-21 7 views
0

私のテストケースの1つでは、いくつかの設定に基づいてテーブルの決定値を表示しないでください。Selenium C# - 値がテーブルにないか確認してください

私はは以下の通り、値が表示されないと予測された場合に、メッセージを表示するコード作った:

public void AssertRecord(string recordExpected) 
{ 
    try 
    { 
     Assert.AreEqual(recordExpected, RecordGridCell.GetGridCellAtPosition1BasedOnAnyValue(recordExpected)); 
    } 
    catch (Exception) 
    { 
     Console.WriteLine(recordExpected + " not found."); 
    } 
} 

をところで、GetGridCellAtPosition1BasedOnAnyValue上記の機能はここにある:

public static string GetGridCellAtPosition1BasedOnAnyValue(this IWebElement table, string value) 
{ 
    UtilFunctions.WaitForLoadingBar(); 
    IList<IWebElement> tableRow = table.FindElements(By.XPath(".//tr//td[text()='" + value + "']//ancestor::tr//td[1]")); 
    return tableRow.First().GetAttribute("innerHTML"); 
} 

今日、私が得たコードでは、の出力が表示されます。たとえば、「チョコレートバーが見つかりません」と表示されます。値が存在する場合は、何もスローされません。

私の問題は:そこには存在すべきではなく、予測できない値があれば、それは報告されません。

テーブルにあるの値があれば、報告する方法を見つけるのに助けが必要です。

+0

テーブルにはどのようなレコードが予期されているかのリストがありますか? –

+0

@Bᴜᴅɪこれはテストケースで定義されています。 –

答えて

1

テーブル内のどのレコードが予期されているかのリストが事前に定義されているので、そのリストを使用してテーブル内のレコードの実際のリストと照合します(Enumerable.Except経由)。ここで

はあなたのアイデアを与えるためにいくつかのコードです:

using System.Collections.Generic; 
using System.Linq; 

var expectedRecords = new List<string> { "A", "B", "C", "D" }; 
var actualRecords = new List<string> { "A", "C", "E" }; 

//var actualRecords = table.FindElements(".//tr//td[1]") 
//       .Select(e => e.GetAttribute("innerHTML")) 
//       .ToList(); 

var notFoundRecords = expectedRecords.Except(actualRecords); // [ "B", "D" ] 
var invalidRecords = actualRecords.Except(expectedRecords); // [ "E" ] 

これは、実際のリストにないですが、なければなりません(notFoundRecords)、実際のものと、リストにですが、することはすべきではないものをあなたに両方のリストを与えます(invalidRecords)。

関連する問題