web-dev-qa-db-fra.com

Trouver l'élément div par plusieurs noms de classe?

<div class="value test" /> Je voudrais identifier cet élément Web. Il n'a défini que ces deux classes. Je ne peux pas faire ce qui suit car className ne prend pas de valeur séparée par des espaces. Quelles sont les alternatives?

@FindBy(className = "value test")
@CacheLookup
private WebElement test;
33
membersound

Je ne pense pas que la réponse de barak manos l'explique pleinement.

Imaginez que nous ayons peu d'éléments comme suit:

  1. <div class="value test"></div>
  2. <div class="value test "></div>
  3. <div class="first value test last"></div>
  4. <div class="test value"></div>

Comment XPath correspond

  • Correspondance 1 seule (correspondance exacte), réponse de barak

    driver.findElement(By.xpath("//div[@class='value test']"));
    
  • Match 1, 2 et 3 (la classe de match contient value test, l'ordre des classes est important)

    driver.findElement(By.xpath("//div[contains(@class, 'value test')]"));
    
  • Correspondance 1, 2, 3 et 4 (tant que les éléments ont la classe value et test)

    driver.findElement(By.xpath("//div[contains(@class, 'value') and contains(@class, 'test')]"));
    

De plus, dans des cas comme celui-ci, Css Selector est toujours en faveur de XPath (rapide, concis, natif).

  • Match 1

    driver.findElement(By.cssSelector("div[class='value test']"));
    
  • Match 1, 2 et 3

    driver.findElement(By.cssSelector("div[class*='value test']"));
    
  • Match 1, 2, 3 et 4

    driver.findElement(By.cssSelector("div.value.test"));
    
87
Yi Zeng

Essaye ça:

test = driver.findElement(By.xpath("//div[@class='value test']"));
10
barak manos