C#Selenium循环遍历Span类XPATH中的输入按钮

时间:2016-09-14 21:55:00

标签: c# selenium xpath

我正在尝试在C#中创建一个合适的XPATH语法,以点击亚马逊购物车屏幕上的删除按钮。购物车中可能有一个项目或多个项目,所以我想循环删除按钮。我只是通过包含单词Delete来找到删除按钮。我终于说好了让我找到屏幕上的所有按钮。我将循环遍历它们并使用每个链接中的文本来确定我需要单击哪一个。唯一的问题是它确实在页面上找到了20个不同的项目((“// input [@ type ='submit']”)),但Text字段对所有人都是空的。我是这个XPATH语法的新手,它确实给我带来了问题。任何帮助,将不胜感激。

以下是我尝试过的许多内容以及相关信息的屏幕截图:

var links = driver.FindElements(By.XPath("//table[contains(@name, 'ReportViewer_fixedTable')]"));
var links = driver.FindElements(By.XPath("//css=a[name^='submit.delete']"));
var links = driver.FindElement(By.CssSelector("table[id*='ReportViewer_fixedTable']"));
var links = driver.FindElements(By.XPath("//button[@type='submit'][text()='Delete']")); WORKED DIDNT FIND ANYTHING
var links = driver.FindElements(By.XPath("//input[@type='submit'][contains(text(),'Delete')]"));  //WOREKED DIDNT FIND ANYTHING
var links = driver.FindElements(By.XPath("//input[@type='submit']"));
var links = driver.FindElements(By.XPath("//div[@class='a-row sc-action-links']/span[@class='a-declarative']"));

从Chrome检查: enter image description here

当我循环查找//输入[@ type ='submit']时,我的输出结果如何。您可以看到Text为空。这就是所有人的方式。

enter image description here

1 个答案:

答案 0 :(得分:2)

xpath text()匹配上下文节点的文本节点子节点,而input没有带有欲望文本Delete的子元素。

实际上Delete文字存在于输入元素的value属性中,因此您应该尝试将Delete文本与值属性匹配为@value = 'Delete'

所以要使用Xpath查找所有删除按钮,请尝试以下操作: -

var deleteButtons = driver.FindElements(By.XPath("//input[@type='submit'][@value='Delete']")); 

或使用CssSelector如下: -

var deleteButtons = driver.FindElements(By.CssSelector("input[type='submit'][value='Delete']")); 

更新: 对于任何可能在将来需要它的人。这是成品:

var deleteButtons = driver.FindElements(By.CssSelector("input[type='submit'][value='Delete']"));

        foreach (var link in deleteButtons)
        {
            link.Click();
        }