2014-02-11 11 views
22

<div class="value test" /> Ich möchte dieses Webelement identifizieren. Es hat nur diese zwei Klassen definiert. Ich kann Folgendes nicht tun, da className keinen durch Leerzeichen getrennten Wert annimmt. Was sind Alternativen?Finden div-Element von mehreren Klassennamen?

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

Antwort

54

Ich glaube nicht, Barak manos Antwort hat es vollständig erklärt.

Stellen wir einige Elemente wie die folgenden haben:

  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>

Wie XPath Spiele

  • Spiel nur 1 (genaue Übereinstimmung), Baraks Antwort

    driver.findElement(By.xpath("//div[@class='value test']")); 
    
  • Match 1, 2 und 3 (Match-Klasse enthält value test, Klasse, um Angelegenheiten)

    driver.findElement(By.xpath("//div[contains(@class, 'value test')]")); 
    
  • Match 1, 2, 3 und 4 (solange die Elemente die Klassen value und test haben)

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

Auch in Fällen wie diesem ist Css Selector immer für XPath (schnell, prägnant, nativ).

  • Spiel 1

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

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

    driver.findElement(By.cssSelector("div.value.test")); 
    
5

Try this:

test = driver.findElement(By.xpath("//div[@class='value test']")); 
Verwandte Themen