Besoin de trouver un élément dans le sélénium par css
<h5>
. Je suis en train d'essayer cela dans craigslist. Toute aide sera très 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">
3 réponses
N'utiliser que les noms de classe n'est pas suffisant dans votre cas.
By.cssSelector(".ban")
a 15 noeuds correspondantsBy.cssSelector(".hot")
a 11 noeuds correspondantsBy.cssSelector(".ban.hot")
a 5 nœuds correspondants
par conséquent, vous avez besoin de plus de restrictions pour la réduire. Options 1 et 2 ci-dessous sont disponibles pour le sélecteur css, 1 pourrait être celui qui convient le mieux à vos besoins.
Option 1: Utilisation de l'index des éléments de liste (CssSelector ou XPath)
Limitations
- pas assez stable si la structure du site change
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: Utilisation deFindElements
, alors indexez-les. (CssSelector ou XPath)
Limitations
- pas assez stable si la structure du site change
- pas le sélecteur natif
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: Utilisation de texte (XPath)
Limitations
- Pas pour les sites multilingues
- Uniquement pour XPath, pas pour le Sélénium est CssSelector
Exemple:
driver.FindElement(By.XPath("//h5[contains(@class, 'ban hot') and text() = 'us states']"));
Option 4: Index le sélecteur groupé (XPath uniquement)
Limitations
- pas assez stable si la structure du site change
- seulement pour XPath, pas CssSelector
Exemple:
driver.FindElement(By.XPath("(//h5[contains(@class, 'ban hot')])[3]"));
Option 5: Trouver le lien des éléments de la liste cachée par href, puis revenir à h5 (XPath seulement)
Limitations
- seulement pour XPath, pas CssSelector
- faible performance
- Difficile De XPath
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")
devrait tous la sélectionner à moins qu'il y ait un autre élément qui possède ces classes.
In CSS,.name
moyen de trouver un élément qui a une classe avec name
. .foo.bar.baz
signifie Trouver un élément qui possède toutes ces classes (dans le même élément).
cependant, chacun de ces sélecteurs sélectionnera seulement le premier élément qui correspond sur la page. Si vous avez besoin de quelque chose de plus spécifique, s'il vous plaît poster le HTML des autres éléments qui ont ces classes.
Vous pouvez décrire votre sélection css comme une feuille de style en cascade:
protected override void When()
{
SUT.Browser.FindElements(By.CssSelector("#carousel > a.tiny.button"))
}