我想在<h5>
中找到此链接“us states”的元素。我在craigslist中尝试这个。任何帮助将受到高度赞赏
以下是网址: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">
答案 0 :(得分:69)
在您的情况下,仅使用类名是不够的。
By.cssSelector(".ban")
有15个匹配的节点By.cssSelector(".hot")
有11个匹配的节点By.cssSelector(".ban.hot")
有5个匹配的节点因此,您需要更多限制来缩小范围。 选项1和2 可用于css选择器,1可能是最适合您需求的选项。
选项1:使用列表项&#39; index(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&#39; FindElements
,然后将其编入索引。 (CssSelector或XPath)
限制的
示例:的
// 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)
限制的
示例:的
driver.FindElement(By.XPath("//h5[contains(@class, 'ban hot') and text() = 'us states']"));
选项4:索引分组选择器(仅限XPath)
限制的
示例:的
driver.FindElement(By.XPath("(//h5[contains(@class, 'ban hot')])[3]"));
选项5:通过href查找隐藏列表项链接,然后遍历回h5(仅限XPath)
限制的
示例:的
driver.FindElement(By.XPath(".//li[.//ul/li/a[contains(@href, 'geo.craigslist.org/iso/us/al')]]/h5"));
答案 1 :(得分:0)
By.cssSelector(".ban")
或By.cssSelector(".hot")
或By.cssSelector(".ban.hot")
都应该选择它,除非有另一个元素包含这些类。
在CSS中,.name
表示查找具有name
类的元素。 .foo.bar.baz
表示查找包含所有这些类的元素(在同一元素中)。
但是,每个选择器都只会选择与页面上匹配的第一个元素。如果您需要更具体的内容,请发布包含这些类的其他元素的HTML。
答案 2 :(得分:0)
您可以像级联样式表dows一样描述您的CSS选择:
protected override void When()
{
SUT.Browser.FindElements(By.CssSelector("#carousel > a.tiny.button"))
}