Necesidad de encontrar elemento en selenium por css

Quiero encontrar el elemento de este enlace “estados de

.

.” En

. Estoy intentando esto en craigslist. Cualquier ayuda será muy apreciada

Aquí está la url: http://auburn.craigslist.org/

      
<table id="container" cellspacing="0" cellpadding="0"

Solo usar nombres de clase no es suficiente en tu caso.

  • By.cssSelector(".ban") tiene 15 nodos coincidentes
  • By.cssSelector(".hot") tiene 11 nodos coincidentes
  • By.cssSelector(".ban.hot") tiene 5 nodos coincidentes

Por lo tanto, necesita más restricciones para reducirlo. Las opciones 1 y 2 a continuación están disponibles para el selector CSS, 1 podría ser el que mejor se adapte a sus necesidades.

Opción 1: Usar el índice de elementos de la lista (CssSelector o XPath)

Limitaciones

  • No es lo suficientemente estable si la estructura del sitio cambia

Ejemplo:

 driver.FindElement(By.CssSelector("#rightbar > .menu > li:nth-of-type(3) > h5")); driver.FindElement(By.XPath("//*[@id='rightbar']/ul/li[3]/h5")); 

Opción 2: Usar FindElements de FindElements , luego indexarlos. (CssSelector o XPath)

Limitaciones

  • No es lo suficientemente estable si la estructura del sitio cambia
  • No es la forma del selector nativo

Ejemplo:

 // note that By.CssSelector(".ban.hot") and //*[contains(@class, 'ban hot')] are different, but doesn't matter in your case IList hotBanners = driver.FindElements(By.CssSelector(".ban.hot")); IWebElement banUsStates = hotBanners[3]; 

Opción 3: Usar texto (solo XPath)

Limitaciones

  • No para sitios multilenguaje
  • Solo para XPath, no para Seussium’s CssSelector

Ejemplo:

 driver.FindElement(By.XPath("//h5[contains(@class, 'ban hot') and text() = 'us states']")); 

Opción 4: indexe el selector agrupado (solo XPath)

Limitaciones

  • No es lo suficientemente estable si la estructura del sitio cambia
  • Solo para XPath, no para CssSelector

Ejemplo:

 driver.FindElement(By.XPath("(//h5[contains(@class, 'ban hot')])[3]")); 

Opción 5: Encuentre los elementos de la lista oculta por href, luego vuelva a h5 (solo XPath)

Limitaciones

  • Solo para XPath, no para CssSelector
  • Bajo rendimiento
  • Tricky XPath

Ejemplo:

 driver.FindElement(By.XPath(".//li[.//ul/li/a[contains(@href, 'geo.craigslist.org/iso/us/al')]]/h5")); 

By.cssSelector(".ban") o By.cssSelector(".hot") o By.cssSelector(".ban.hot") deberían seleccionarlo a menos que haya otro elemento que tenga esas clases.

En CSS, .name significa encontrar un elemento que tiene una clase con name . .foo.bar.baz significa encontrar un elemento que tenga todas esas clases (en el mismo elemento).

Sin embargo, cada uno de esos selectores seleccionará solo el primer elemento que coincida con él en la página. Si necesita algo más específico, publique el HTML de los otros elementos que tienen esas clases.

Puede describir su selección de CSS como hojas de estilo en cascada:

 protected override void When() { SUT.Browser.FindElements(By.CssSelector("#carousel > a.tiny.button")) }