单击具有相同 CssSelector 或相同 XPath FindElements 的所有元素

Posted

技术标签:

【中文标题】单击具有相同 CssSelector 或相同 XPath FindElements 的所有元素【英文标题】:Click all elements with same CssSelector or same XPath FindElements 【发布时间】:2014-09-05 07:40:36 【问题描述】:

在为 Selenium WebDriver 编写代码的 Visual Studio 中,同一个按钮的这两个代码只能正常工作一次。

点击按钮通过 Css 选择器:

driver.FindElement(By.CssSelector(".follow-text")).Click();

单击按钮通过 XPath:

driver.FindElement(By.XPath("//button[@class='user-actions-follow-button js-follow-btn follow-button btn small small-follow-btn']")).Click();

直到这一切都正确...


但我想点击所有按钮,而不仅仅是第一个,而且由于FindElements(复数形式)让我出错,我该如何点击所有按钮相同的代码?

使用此获取错误:

List<IWebElement> textfields = new List<IWebElement>(); 
driver.FindElement(By.XPath("//button[@class='user-actions-follow-button js-follow-btn follow-button btn small small-follow-btn']")).Click();
driver.FindElement(By.XPath("//button[@class='user-actions-follow-button js-follow-btn follow-button btn small small-follow-btn'][3]")).Click();

查看截图:

【问题讨论】:

【参考方案1】:
List <WebElement> list = driver.FindElements(By.XPath("//button[@class='user-actions-follow-button js-follow-btn follow-button btn small small-follow-btn']"));

然后遍历列表中包含的元素列表:

int x = 0;
while (x < list.size()) 
    WebElement element = list.get(x);
    element.click();

【讨论】:

【参考方案2】:

您需要遍历FindElements 结果并在每个项目上调用.Click()

var result = driver.FindElements(By.XPath("//button[@class='user-actions-follow-button js-follow-btn follow-button btn small small-follow-btn']"));
foreach (IWebElement element in result)

    element.Click();

仅供参考,您需要将 XPath 括在括号中,以使您尝试使用 XPath 索引的代码有效:

driver.FindElement(By.XPath("(//button[@class='user-actions-follow-button js-follow-btn follow-button btn small small-follow-btn'])[3]")).Click();

【讨论】:

【参考方案3】:

你应该使用类似的东西(注意 findElements 中的 s)

List<WebElement> textfields = driver.findElements(By.XPath("//button[@class='user-actions-follow-button js-follow-btn follow-button btn small small-follow-btn']"));

然后用 for 循环进行迭代

for(WebElement elem : textfields)
    elem.click();

【讨论】:

出现这个错误,我做错了什么..? mm aix:s22.postimg.org/d38bhviyp/QUINTO.jpg 谢谢 奇怪,你使用的是什么 java 版本,在什么 IDE 上? 我使用 Java 版本号 7,以及用于 Firefox 的 Selenium IDE(最后一个),在 Visual Studio 中编写代码 如图片所示,您一定忘记了; 对不起,这是我的错,因为我使用 Webdriver C#,它无法运行,我现在看到了,对不起,对不起,谢谢大家。

以上是关于单击具有相同 CssSelector 或相同 XPath FindElements 的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

如果我有多个具有相同文本的按钮,如何检查我的 JFrame 中的哪个按钮被单击?

如何使用硒单击具有动态输入的单选按钮?

查找具有相同类但排除单击的元素的所有元素? [复制]

Tooltipster - 如果单击其中一个工具提示,如何弹出具有相同内容的工具提示

我如何通过 className 单击此元素,因为我将它用于具有相同类名的多个屏幕

当我单击具有相同类的列表中的按钮时,在顶部元素中添加类 - Jquery