driver.findElement(By.className)是否找到具有多个类名的类?

时间:2015-05-19 06:22:20

标签: java selenium selenium-webdriver

我有这个HTML:

<class = "abc pqr"></class>

因此,如果我执行driver.findElement(By.className("abc"),WebDriver是否会在DOM结构中找到该类?

我想知道的是,如果我们只提供类的子字符串,By.className是否有效?

3 个答案:

答案 0 :(得分:1)

简短的回答是肯定的! 案例中By.className("abc")By.className("pqr")完全没问题。

请注意,使用子字符串 。在元素<class = "abc pqr"/>中,这是一个以空格分隔的类列表!

答案 1 :(得分:0)

如果你仍然需要答案 - 是的,它会。如果你试图像By.classname("abc pqr")那样搜索它,它就不会发生。

如果要按类的一部分搜索,请使用css选择器。想象一下你有

<a class="superclass secondaryclass">

然后你可以找到它:

By.cssSelector("//a[class*=super]")

因为*=是通过子串搜索(非严格的)。

如果您仍想通过xpath和substring进行搜索,那么您可以执行以下操作:

//a[substring(@class, string-length(@class) - 5) = 'super']

或尝试使用a[contains(@class, 'super')]

有太多方法可以做到这一点:)

答案 2 :(得分:-1)

简答:不。您必须使用以下方法之一根据多个类名选择元素。

driver.find(By.cssSelector(".abc.pqr"));

driver.find(By.xpath("//*[@class='abc pqr']"));