<div class="value test" />
我想确定那个网络元素。它只定义了这两个类。
我无法执行以下操作,因为className
不采用空格分隔值。有什么替代方案?
@FindBy(className = "value test")
@CacheLookup
private WebElement test;
答案 0 :(得分:80)
我不认为巴拉克马诺斯的答案已经完全解释了它。
想象一下,我们的元素如下:
<div class="value test"></div>
<div class="value test "></div>
<div class="first value test last"></div>
<div class="test value"></div>
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(只要元素具有类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"));
答案 1 :(得分:6)
试试这个:
test = driver.findElement(By.xpath("//div[@class='value test']"));
答案 2 :(得分:1)
类By.ByClassName在By.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
来标识元素,则可以使用css-selectors如下:
value
您也可以使用xpath,如下所示:
test
Invalid selector: Compound class names not permitted error using Selenium