Tylko używanie nazw klas nie jest wystarczające w twoim przypadku.
By.cssSelector(".ban")
ma 15 pasujące węzły
By.cssSelector(".hot")
ma 11 pasujące węzły
By.cssSelector(".ban.hot")
posiada 5 pasujące węzły
Dlatego trzeba więcej ograniczeń, aby sprowadzić. Opcje 1 i 2 poniżej są dostępne dla selektora css, 1 może być tym, który najlepiej odpowiada Twoim potrzebom.
Opcja 1: Użycie indeksu elementów listy (CssSelector lub XPath)
Ograniczenia
- mało stabilny, jeśli struktura witryny zmienia
Przykład:
driver.FindElement(By.CssSelector("#rightbar > .menu > li:nth-of-type(3) > h5"));
driver.FindElement(By.XPath("//*[@id='rightbar']/ul/li[3]/h5"));
Opcja 2: przy użyciu Selenium FindElements
, a następnie zindeksuj je.(CssSelector lub XPath)
Ograniczenia
- mało stabilny, jeśli struktura witryny zmienia
- Nie sposób natywny selektora
Przykład:
// 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];
Opcja 3: Korzystanie z tekstu (tylko XPath)
Ograniczenia
- Nie dla witryn wielojęzycznych
- Tylko dla XPath, nie dla CssSelector selen za
Przykład:
driver.FindElement(By.XPath("//h5[contains(@class, 'ban hot') and text() = 'us states']"));
Wariant 4: Wskaźnik zgrupowane selektor (XPath tylko)
Ograniczenia
- mało stabilny, jeśli struktura witryny zmienia
- Tylko dla XPath, nie CssSelector
Przykład:
driver.FindElement(By.XPath("(//h5[contains(@class, 'ban hot')])[3]"));
Wariant 5: Znajdź ukryte listy przedmiotów Link przez href, a następnie przechodzić z powrotem do h5 (tylko XPath)
Ograniczenia
- Tylko dla XPath, nie CssSelector
- Niska wydajność
- Tricky XP ATH
Przykład:
driver.FindElement(By.XPath(".//li[.//ul/li/a[contains(@href, 'geo.craigslist.org/iso/us/al')]]/h5"));
By.cssSelector (". Ban.hot:nth-of-type(3)") –
Jest to dodatek do odpowiedzi Yi Zengsa. Z jakiegoś powodu nie wspomniał, że możesz użyć nth-of-type z nazwą klasy w cssSelector.Nie musisz przechodzić przez listę elementów, aby uzyskać N-ty element zawierający nazwę klasy. –
@Vlad: Dzięki za wskazanie. 'nth-of-type' to CSS3, który nie był w pełni obsługiwany przez Selenium pod maską dla wszystkich przeglądarek w tym czasie. To może być teraz obsługiwane, ale nie mam szansy na weryfikację. Czy przetestowałeś go z najnowszą Selenium? –