通过多个类名来查找div元素?

时间:2014-02-11 21:21:30

标签: java css selenium selenium-webdriver

<div class="value test" /> 我想确定那个网络元素。它只定义了这两个类。 我无法执行以下操作,因为className不采用空格分隔值。有什么替代方案?

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

3 个答案:

答案 0 :(得分:80)

我不认为巴拉克马诺斯的答案已经完全解释了它。

想象一下,我们的元素如下:

  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>
  5. XPath如何匹配

    • 仅匹配1(完全匹配),barak的回答

      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(只要元素具有类valuetest

      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"));
      

答案 1 :(得分:6)

试试这个:

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

答案 2 :(得分:1)

Class By.ByClassName

By.ByClassNameBy.java中的定义如下:

$query = "UPDATE vendor_data SET name= :name, owner= :owner ... WHERE id= :id";

此用例

因此,根据定义,您不能传递多个类,即$res->execute([':name' => $name, ':owner' => $owner ... , ':id' => $id]); /** * Find elements based on the value of the "class" attribute. If an element has multiple classes, then * this will match against each of them. For example, if the value is "one two onone", then the * class names "one" and "two" will match. * * @param className The value of the "class" attribute to search for. * @return A By which locates elements by the value of the "class" attribute. */ public static By className(String className) { return new ByClassName(className); } 作为value的参数。发送多个类将引发以下错误:

test

解决方案

有多种解决此用例的方法,如下所示:

  • 如果仅通过@FindBy(className = "...") invalid selector: Compound class names not permitted 来唯一标识元素,则可以使用:

    classname
  • 如果仅通过value @FindBy(className = "value") @CacheLookup private WebElement test; 来唯一标识元素,则可以使用:

    classname
  • 如果同时需要test @FindBy(className = "test") @CacheLookup private WebElement test; classnames 来标识元素,则可以使用如下:

    value
  • 您也可以使用,如下所示:

    test

tl;博士

Invalid selector: Compound class names not permitted error using Selenium