私はSeleniumを使っていて、テーブルから値を選択しようとしています。私は3回(3つの異なるテーブルに対して)行いますが、この値を繰り返すと、Seleniumは最初のテーブルから値を選択します。例えばSelenium C# - 間違ったテーブルからセルを選択しています
:
表1では、コードは、何の問題もそれを選択しない、値 "X123" があります。 テーブル2には、値「X123」もあります。 Seleniumが2番目のテーブルから値を選択しようとすると、最初のテーブルから値が選択されます。
それは、これらのテーブルの要素をマッピングするためには本当に難しい、それらはすべて同じ構造で構築されているので、私は次のように、そのためのXPathセレクターを選択しました:
[FindsBy(How = How.XPath, Using = "//div[@class='k-widget k-window' and not(contains(@style, 'display: none'))]//child::div[@class='col-md-4 col-md-offset-0'][1]//child::table[@data-role='selectable']")]
private IWebElement Table1 { get; set; }
[FindsBy(How = How.XPath, Using = "//div[@class='k-widget k-window' and not(contains(@style, 'display: none'))]//child::div[@class='col-md-4 col-md-offset-0'][2]//child::table[@data-role='selectable']")]
private IWebElement Table2 { get; set; }
[FindsBy(How = How.XPath, Using = "//div[@class='k-widget k-window' and not(contains(@style, 'display: none'))]//child::div[@class='col-md-4 col-md-offset-0'][3]//child::table[@data-role='selectable']")]
private IWebElement Table3{ get; set; }
をセルを選択するために使用される関数がされ:
public static void SelectMultipleGridCell(this IWebElement table, string value)
{
IList<IWebElement> tableRow = table.FindElements(By.XPath("//tr//td[text()='" + value + "']"));
new WebDriverWait(GeneralProperties.Driver, TimeSpan.FromSeconds(5))
.Until(ExpectedConditions.ElementExists(By.XPath("//tr//td[text()='" + value + "']")));
foreach (IWebElement row in tableRow)
{
if (row.IsVisible())
{
new Actions(GeneralProperties.Driver).KeyDown(Keys.Control).Click(row).KeyUp(Keys.Control).Build().Perform();
break;
}
}
}
この機能を使用する他のすべての条件の場合、テーブル(複数のセルを1つだけ選択するなど)で機能します。値を繰り返しても、期待どおりに機能しません。私のコードが間違っているのですか、それについてSeleniumにいくつかの制限がありますか?
ご協力いただけると助かります。
お返事ありがとうございます!私はテストに合格し、動作しませんでした..それはまだ最初のテーブルから値を選択しています。 –
このエラーは、あなたが記述している問題とは関係なく、XPathの前にあるドットに関係しているかどうかは疑問です。 –
申し訳ありませんが、私は自分自身を間違って表現しました(気がついたら私のコメントを変えてしまった)。行動はまだ間違っています。要素が示すように、2番目のテーブルから値を選択する必要がありますが、最初のテーブルから選択しています –