Je veux trouver l'élément de ce lien "états américains" dans <h5>
. J'essaie ceci dans Craigslist. Toute aide sera grandement appréciée
Voici l'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">
Utiliser uniquement des noms de classe n'est pas suffisant dans votre cas.
By.cssSelector(".ban")
a 15 nœuds correspondantsBy.cssSelector(".hot")
a 11 nœuds correspondantsBy.cssSelector(".ban.hot")
a 5 nœuds correspondantsPar conséquent, vous avez besoin de plus de restrictions pour le réduire. Les options 1 et 2 ci-dessous sont disponibles pour le sélecteur css, le 1 peut être celui qui répond le mieux à vos besoins.
Option 1: Utilisation de l'index des éléments de la liste (CssSelector ou XPath)
Limitations
Exemple:
driver.FindElement(By.CssSelector("#rightbar > .menu > li:nth-of-type(3) > h5"));
driver.FindElement(By.XPath("//*[@id='rightbar']/ul/li[3]/h5"));
Option 2: Utilisez la variable FindElements
de Selenium, puis indexez-les. (CssSelector ou XPath)
Limitations
Exemple:
// 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: Utiliser du texte (XPath uniquement)
Limitations
Exemple:
driver.FindElement(By.XPath("//h5[contains(@class, 'ban hot') and text() = 'us states']"));
Option 4: Indexer le sélecteur groupé (XPath uniquement)
Limitations
Exemple:
driver.FindElement(By.XPath("(//h5[contains(@class, 'ban hot')])[3]"));
Option 5: Trouvez le lien des éléments de liste cachés par href, puis retournez à h5 (XPath uniquement)
Limitations
Exemple:
driver.FindElement(By.XPath(".//li[.//ul/li/a[contains(@href, 'geo.craigslist.org/iso/us/al')]]/h5"));
By.cssSelector(".ban")
ou By.cssSelector(".hot")
ou By.cssSelector(".ban.hot")
doivent tous le sélectionner, sauf si un autre élément contient ces classes.
.name
signifie qu'en CSS, trouve un élément qui a une classe avec name
. .foo.bar.baz
signifie rechercher un élément contenant toutes ces classes (dans le même élément).
Cependant, chacun de ces sélecteurs ne sélectionnera que le premier élément qui lui correspond sur la page. Si vous avez besoin de quelque chose de plus spécifique, publiez le code HTML des autres éléments contenant ces classes.
Vous pouvez décrire votre sélection css comme des feuilles de style en cascade:
protected override void When()
{
SUT.Browser.FindElements(By.CssSelector("#carousel > a.tiny.button"))
}