C# 使用Selenium单击多行单选按钮
我正在使用网页上的一个表,其中有X行。每行代表一个请求者,请求授予或撤销某些内容。此自动化的目的是自动批准授予或撤销。以下代码可以工作,但奇怪的是,仅适用于第一次授予或撤销:C# 使用Selenium单击多行单选按钮,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,我正在使用网页上的一个表,其中有X行。每行代表一个请求者,请求授予或撤销某些内容。此自动化的目的是自动批准授予或撤销。以下代码可以工作,但奇怪的是,仅适用于第一次授予或撤销: var table = driver.FindElement(By.XPath(@"//*[@id=""span_pending_approvals""]/form/table/tbody")); var rows = table.FindElements(By.TagNam
var table = driver.FindElement(By.XPath(@"//*[@id=""span_pending_approvals""]/form/table/tbody"));
var rows = table.FindElements(By.TagName("tr"));
var rowCount = 1;
foreach (var row in rows)
{
if (row.Text.Contains("Grant"))
{
var requester = row.Text.Split(' ')[3];
row.FindElement(By.XPath("//input[@value='approve']")).Click();
}
else if (row.Text.Contains("Revoke"))
{
row.FindElement(By.XPath("//input[@value='revoke']")).Click();
}
rowCount++;
}
该项目的产出为:
Amy - Grant[X] Wait[]
Andy - Grant[] Wait[]
Anthony - Grant[] Wait[]
Brad - Revoke[X] Wait[]
Beth - Revoke[] Wait[]
Bort - Revoke[] Wait[]
当我想要的是:
Amy - Grant[X] Wait[]
Andy - Grant[X] Wait[]
Anthony - Grant[X] Wait[]
Brad - Revoke[X] Wait[]
Beth - Revoke[X] Wait[]
Bort - Revoke[X] Wait[]
思考为什么这只适用于每个选项的第一次出现?当我逐步使用调试器时,我可以看到.Click();正在按预期处理每一行,但它实际上只在网页上注册首次出现的“授予”或“撤销”。如下更新脚本
foreach (var row in rows)
{
if (row.Text.Contains("Grant"))
{
var requester = row.Text.Split(' ')[3];
row.FindElement(By.XPath(".//input[@value='approve']")).Click();
}
else if (row.Text.Contains("Revoke"))
{
row.FindElement(By.XPath(".//input[@value='revoke']")).Click();
}
rowCount++;
}
只是将范围限制在当前行,而不是使用整个dom。在第行下xpath的开头,尝试更改此行
row.FindElement(By.xpath(“//input[@value='approve']”)。单击()
torow.FindElement(By.XPath(“.//input[@value='approve'])。单击()
和行.FindElement(By.XPath(“//input[@value='revoke'])。单击()
将这一行添加到行.FindElement(按.XPath(“.//input[@value='revoke'])。单击()代码>。只需在第行xpath的开头使用
,将作用域限制在当前行,而不是整个dom,这就成功了。谢谢将答案从评论移至此处。如果您认为问题已经解决,请接受解决方案。请随意投票:-)