需要通过CSS在selenium中查找元素
我想在<h5>find这个链接的元素“us states”。 我正在Craigslist中尝试这个。 任何帮助将不胜感激 
这是url: http : //auburn.craigslist.org/
  <html class=""> <head> <body class="homepage w1024 list"> <script type="text/javascript"> <article id="pagecontainer"> <section class="body"> <table id="container" cellspacing="0" cellpadding="0" <tbody> <tr> <td id="leftbar"> <td id="center"> <td id="rightbar"> <ul class="menu collapsible"> <li class="expand s"> <li class="s"> <li class="s"> <h5 class="ban hot">us states</h5> <ul class="acitem" style="display: none;"> </li> <li class="s"> <li class="s"> 
	
在你的情况下只使用类名是不够的。
-   By.cssSelector(".ban")有15个匹配节点
-   By.cssSelector(".hot")有11个匹配节点
-   By.cssSelector(".ban.hot")有5个匹配的节点
所以你需要更多的限制来缩小它。 下面的选项1和2可用于CSSselect器,1可能是最适合您需求的选项。
选项1:使用列表项的索引(CssSelector或XPath)
限制
- 如果网站结构发生变化,则不够稳定
例:
 driver.FindElement(By.CssSelector("#rightbar > .menu > li:nth-of-type(3) > h5")); driver.FindElement(By.XPath("//*[@id='rightbar']/ul/li[3]/h5")); 
  选项2:使用Selenium的FindElements ,然后索引它们。  (CssSelector或XPath) 
限制
- 如果网站结构发生变化,则不够稳定
- 不是本机select器的方式
例:
 // note that By.CssSelector(".ban.hot") and //*[contains(@class, 'ban hot')] are different, but doesn't matter in your case IList<IWebElement> hotBanners = driver.FindElements(By.CssSelector(".ban.hot")); IWebElement banUsStates = hotBanners[3]; 
选项3:使用文本(仅限XPath)
限制
- 不适用于多语言网站
- 仅适用于XPath,不适用于Selenium的CssSelector
例:
 driver.FindElement(By.XPath("//h5[contains(@class, 'ban hot') and text() = 'us states']")); 
选项4:对分组select器进行索引(仅限XPath)
限制
- 如果网站结构发生变化,则不够稳定
- 仅适用于XPath,不适用于CssSelector
例:
 driver.FindElement(By.XPath("(//h5[contains(@class, 'ban hot')])[3]")); 
选项5:通过href查找隐藏的列表项链接,然后返回到h5(仅限XPath)
限制
- 仅适用于XPath,不适用于CssSelector
- 低性能
- Tricky XPath
例:
 driver.FindElement(By.XPath(".//li[.//ul/li/a[contains(@href, 'geo.craigslist.org/iso/us/al')]]/h5")); 
  By.cssSelector(".ban")或By.cssSelector(".hot")或By.cssSelector(".ban.hot")都应该select它,除非另有元素具有这些类。 
 在CSS中, .name表示find一个具有name类的元素。  .foo.bar.baz表示find一个包含所有这些类的元素(在同一个元素中)。 
但是,这些select器中的每一个将只select与页面上匹配的第一个元素。 如果您需要更具体的内容,请发布其他具有这些类的元素的HTML。
你可以像层叠样式表一样描述你的CSSselect:
 protected override void When() { SUT.Browser.FindElements(By.CssSelector("#carousel > a.tiny.button")) }