首页 > 解决方案 > 选择第二行表的 XPath 不适用于 Selenium

问题描述

我在网页上有一个 3 行 3 列的表格。我正在尝试遍历这些行,但是 Selenium 只选择了第一个表行,尽管我正在索引从 1 到 3 的行。

我首先选择表格,然后使用它的上下文选择行,最后使用它的上下文选择输入字段。

这是 web 元素的 foundBy 信息:

[[[[[[ChromeDriver: chrome on WINDOWS (2299dfcfe1d9176b6184ef9afa04e150)] -> xpath: //div[contains(@class,'Table') and @data-viewid='table']//table]] -> xpath: tbody/tr[2]]] -> xpath: //div[contains(@class,'Text') and @data-viewid='text2']//div[contains(@class, 'input')]/input]

无论我在 tr 之后使用哪个索引,它总是在第一行工作。它让我疯狂。

任何帮助表示赞赏。怎么了?

谢谢,拉斯洛

标签: seleniumxpath

解决方案


您可以找到特定的 xpath 并直接转到它,或者如果您在每一行的表格中都有一个唯一值,您可以遍历表格,然后在该行上做您想做的事情。

示例:假设您有一张桌子:

|color | email    |car| edit|
|red   |no@no.com |bmw |button|
|blue  |no1@no.com|audi|button|
|yellow|no2@no.com|ford|button|

因此,假设我们想找出用户驾驶的汽车,然后单击按钮让他编辑他的详细信息。

调用该方法并传递电子邮件地址 -

  ClickTableLink("no1@no.com");

在下面, tds[i] 是电子邮件地址字段,因为这是我们传递的变量,也是我们停止的地方。现在我们位于电子邮件地址的正确行上。但我们想找到用户驾驶的汽车,然后编辑数据。如果 tds[i] 是我们的 email 字段,我们需要增加 1 或 tds[i+1] 以到达 car 字段并增加 2 或 tds[i+2] 以单击按钮。如果我们想要颜色,我们需要减去 1 或 tds[i-1] 然后得到他们喜欢的颜色的值。

 public void ClickTableLink(string value)
 {
 var table =  driver.FindElement(By.Xpath("//div[@class='MyTable']"));
 foreach (var tr in table.FindElements(By.TagName("tr")))
 {
 var tds = tr.FindElements(By.TagName("td"));
for (var i = 0; i < tds.Count; i++)
 {
 if (tds[i].Text.Trim().Contains(value)) 
 {
     var car = tds[i+1].Text;
     tds[i + 2].Click();
    break;
}

}
}
}

推荐阅读