Ich möchte das Element dieses Links "us states" in <h5>
finden. Ich versuche das in Craigslist. Jede Hilfe wird sehr geschätzt
Hier ist die 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">
Nur die Verwendung von Klassennamen reicht in Ihrem Fall nicht aus.
By.cssSelector(".ban")
hat 15 übereinstimmende KnotenBy.cssSelector(".hot")
hat 11 übereinstimmende KnotenBy.cssSelector(".ban.hot")
hat 5 übereinstimmende KnotenDaher benötigen Sie weitere Einschränkungen, um sie einzugrenzen. Die Optionen 1 und 2 unten sind für den CSS-Selector verfügbar. Möglicherweise ist 1 derjenige, der Ihren Anforderungen am besten entspricht.
Option 1: Index der Listenelemente (CssSelector oder XPath) verwenden
Einschränkungen
Beispiel:
driver.FindElement(By.CssSelector("#rightbar > .menu > li:nth-of-type(3) > h5"));
driver.FindElement(By.XPath("//*[@id='rightbar']/ul/li[3]/h5"));
Option 2: FindElements
von Selenium verwenden, dann indizieren. (CssSelector oder XPath)
Einschränkungen
Beispiel:
// 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];
Option 3: Verwenden von Text (nur XPath)
Einschränkungen
Beispiel:
driver.FindElement(By.XPath("//h5[contains(@class, 'ban hot') and text() = 'us states']"));
Option 4: Indizieren Sie den gruppierten Selektor (nur XPath)
Einschränkungen
Beispiel:
driver.FindElement(By.XPath("(//h5[contains(@class, 'ban hot')])[3]"));
Option 5: Findet den Link zu den versteckten Listenelementen nach href und geht dann zurück zu h5 (nur XPath)
Einschränkungen
Beispiel:
driver.FindElement(By.XPath(".//li[.//ul/li/a[contains(@href, 'geo.craigslist.org/iso/us/al')]]/h5"));
By.cssSelector(".ban")
oder By.cssSelector(".hot")
oder By.cssSelector(".ban.hot")
sollten alle auswählen, es sei denn, ein anderes Element enthält diese Klassen.
In CSS bedeutet .name
das Finden eines Elements, das eine Klasse mit name
enthält. .foo.bar.baz
bedeutet, ein Element zu finden, das alle diese Klassen enthält (in demselben Element).
Jeder dieser Selektoren wählt jedoch nur das erste Element aus, das mit dem Element auf der Seite übereinstimmt. Wenn Sie etwas genaueres benötigen, geben Sie bitte den HTML-Code der anderen Elemente an, die diese Klassen enthalten.
Sie können Ihre CSS-Auswahl wie Cascading Stylesheets beschreiben:
protected override void When()
{
SUT.Browser.FindElements(By.CssSelector("#carousel > a.tiny.button"))
}