Solo l'utilizzo dei nomi di classe non è sufficiente nel tuo caso.
By.cssSelector(".ban")
ha 15 nodi corrispondenti
By.cssSelector(".hot")
dispone di 11 nodi corrispondenti
By.cssSelector(".ban.hot")
ha 5 nodi corrispondenti
Pertanto è necessario più restrizioni per restringere il campo. Le opzioni 1 e 2 di seguito sono disponibili per il selettore di CSS, 1 potrebbe essere quella che si adatta meglio alle tue esigenze.
Opzione 1: uso Indice voci di elenco (CssSelector o XPath)
Limitazioni
Non
- abbastanza stabile se la struttura del sito cambia
Esempio:
driver.FindElement(By.CssSelector("#rightbar > .menu > li:nth-of-type(3) > h5"));
driver.FindElement(By.XPath("//*[@id='rightbar']/ul/li[3]/h5"));
Opzione 2: utilizzo di Selenum FindElements
, quindi indicizzarli.(CssSelector o XPath)
Limitazioni
Non
- abbastanza stabile se la struttura del sito cambia
- Non il senso del selettore nativo
Esempio:
// 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];
Opzione 3: uso di testo (XPath solo)
Limitazioni
Non
- per i siti multilingua
- Solo per XPath, non per CssSelector di selenio
Esempio:
driver.FindElement(By.XPath("//h5[contains(@class, 'ban hot') and text() = 'us states']"));
Opzione 4: Indice del selettore raggruppati (XPath solo)
Limitazioni
Non
- abbastanza stabile se la struttura del sito cambia
- Solo per XPath, non CssSelector
Esempio:
driver.FindElement(By.XPath("(//h5[contains(@class, 'ban hot')])[3]"));
Opzione 5: Trovare l'elenco nascosto oggetti dei collegamenti da href, poi attraversare di nuovo a h5 (solo XPath)
Limitazioni
- Solo per XPath, non CssSelector
- Basso rendimento
- Tricky XP ath
Esempio:
driver.FindElement(By.XPath(".//li[.//ul/li/a[contains(@href, 'geo.craigslist.org/iso/us/al')]]/h5"));
fonte
2013-08-17 23:54:32
By.cssSelector (". Ban.hot:nth-of-type(3)") –
Questa è un'aggiunta alla risposta di Yi Zengs. Per qualche ragione non ha menzionato che puoi usare nth-of-type con un nome di classe in cssSelector.Non è necessario passare attraverso un elenco di elementi per ottenere l'elemento Nth contenente il nome della classe –
@Vlad: Grazie per aver segnalato. 'nth-of-type' è CSS3, che non era completamente supportato da Selenium sotto la cappa per tutti i browser in quel momento. Potrebbe essere supportato ora, ma non ho la possibilità di verificare. L'hai provato con l'ultimo selenio? –