web-dev-qa-db-ja.com

複数のクラス名でdiv要素を見つけますか?

<div class="value test" />そのウェブ要素を特定したい。この2つのクラスのみが定義されています。 classNameはスペースで区切られた値をとらないため、次のことはできません。代替手段とは何ですか?

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

私はバラク・マノスの答えがそれを完全に説明したとは思わない。

次のような要素がほとんどないことを想像してください。

  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>

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"));
    
87
Yi Zeng

これを試して:

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