selenium - 选择第二行表的 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 之后使用哪个索引,它总是在第一行工作。它让我疯狂。
任何帮助表示赞赏。怎么了?
谢谢,拉斯洛
解决方案
您可以找到特定的 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;
}
}
}
}
推荐阅读
- python - 不打印对象详细信息
- database - TDengine,使用连续查询创建表,里面有错误的数据
- c++ - 输入大数字时,输入值的最后一位始终为 7 或 5
- python - 我想添加到指定范围内的数字的偏移量,如果结果高于范围,我希望结果环绕该范围
- sql - 计算仅在上一个操作的特定时间后发生的操作
- android - Android Room Database 执行批量更新的正确语法是什么?
- javascript - javascript数组过滤器返回相同的数组
- toplevel - 为什么 Toplevel 窗口不会保持在顶部?
- reactjs - 单击时 TreeView 中的 TextField 没有获得焦点
- r - 如何使用 boxplot R 命令在 boxplot 上添加 p 值?