Подтвердить что ты не робот

Найти элемент div несколькими именами классов?

<div class="value test" /> Я бы хотел определить этот веб-элемент. Он определяет только эти два класса. Я не могу сделать следующее, поскольку className не принимает значение, разделенное пробелом. Какие альтернативы?

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

Ответ 1

Я не думаю, что ответ barak manos полностью объяснил это.

Представьте, что у нас есть несколько элементов:

  • <div class="value test"></div>
  • <div class="value test "></div>
  • <div class="first value test last"></div>
  • <div class="test value"></div>

Как соответствует XPath

  • Совпадение только 1 (точное совпадение), ответ барака

    driver.findElement(By.xpath("//div[@class='value test']"));
    
  • Совпадение 1, 2 и 3 (класс соответствия содержит value test, порядок классов)

    driver.findElement(By.xpath("//div[contains(@class, 'value test')]"));
    
  • Сопоставьте 1, 2, 3 и 4 (пока элементы имеют класс value и test)

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

Кроме того, в таких случаях Css Selector всегда выступает за XPath (быстрый, сжатый, собственный).

  • Матч 1

    driver.findElement(By.cssSelector("div[class='value test']"));
    
  • Матч 1, 2 и 3

    driver.findElement(By.cssSelector("div[class*='value test']"));
    
  • Матч 1, 2, 3 и 4

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

Ответ 2

Попробуйте следующее:

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