如何在c#中使用带“not”的css选择器?

时间:2015-09-28 06:05:50

标签: c# selenium-webdriver css-selectors

我想通过css选择器找到元素,但我想跳过其中一些,我该怎么做?

driver.FindElements(By.CssSelector("a[href]")) 

但我不需要接受具有注销和客户/合同的href

2 个答案:

答案 0 :(得分:1)

使用CSS获取元素后,使用LINQ过滤href

Using System.Linq;

string[] blackList = new string[] { "logoff, "client",... };
string[] urls = driver
  .FindElements(By.CssSelector("a[href]"))
  .Select(e => e.GetAttribute("href"))
  .Where(url => !blackList.Any(b => url.Contains(b)))
  .ToArray();

检查URL区分大小写,因为这是W3C states。您可能想要更改此内容。

答案 1 :(得分:1)

你可能不需要LINQ。您可以使用:not()伪类,每个值要排除一个值(请注意每个否定中的*=;我假设子串匹配在这里):

driver.FindElements(By.CssSelector("a[href]:not([href*='logoff']):not([href*='client'])"))

例外情况是,如果您有要排除的动态值列表:您可以使用string.Join()或循环以编程方式构建选择器,然后将其传递给By.CssSelector(),或者您可以按照理查德施耐德的回答使用LINQ保持清洁。