如何在Selenium中按类查找嵌套元素

时间:2019-09-26 15:44:22

标签: java selenium selenium-webdriver xpath

我在另一个div的div内有一个div。最外面的div类别是“ Big Div”,里面有一个div类别为“ Medium Div”,最里面的div类别是“ Small Div”。

当我按下F12键并将鼠标悬停在元素上时,我可以看到div的类,但是我无法使用Selenium找到它们。

我在做什么错了?

WebElement big = browser.findElement(By.cssSelector("//div[contains(@class,'Big')]"));
WebElement medium = big.findElement(By.cssSelector("//div[contains(@class,'Medium')"));
WebElement small = medium.findElement(By.cssSelector("//div[contains(@class,'Small'"));

注意:我的班级包含空格,Selenium找不到任何div,但我得到了例外:“没有这样的元素”。

4 个答案:

答案 0 :(得分:2)

我想在@KunduK的答案中添加几行

WebElement small = browser.findElement(new ByChained(By.xpath("//div[contains(@class,'Big')]"),By.xpath("//div[contains(@class,'Medium')]"),By.xpath("//div[contains(@class,'Small')]")));

当硒已经提供了一些额外的实现时,为什么不使用它呢? :-)

您可以从以下链接获取更多详细信息:

How Selenium's ByChained class really works?

https://www.linkedin.com/pulse/selenium-classes-stabilize-ui-automation-code-durga-behera/

答案 1 :(得分:1)

您使用的语法不适用于cssSelector,而不适用于XPATH,并且您也错过了括号。

立即尝试遵循xpath。

WebElement big = browser.findElement(By.xpath("//div[contains(@class,'Big')]"));
WebElement medium = big.findElement(By.xpath(".//div[contains(@class,'Medium')]"));
WebElement small = medium.findElement(By.xpath(".//div[contains(@class,'Small')]"));

但是您可以一次完成。

WebElement small = browser.findElement(By.xpath("//div[contains(@class,'Big')]//div[contains(@class,'Medium')]//div[contains(@class,'Small')]"));

答案 2 :(得分:1)

在放置括号和所使用的定位符类型时存在语法错误。 尝试以下代码,

WebElement big = browser.findElement(By.xpath("//div[contains(@class,'Big')]"));
WebElement medium = big.findElement(By.xpath("//div[contains(@class,'Medium')]"));
WebElement small = medium.findElement(By.xpath("//div[contains(@class,'Small')]"));

答案 3 :(得分:0)

定位器中缺少括号:

WebElement big = browser.findElement(By.cssSelector("div[class*='Big']"));
WebElement medium = big.findElement(By.cssSelector("div[class*='Medium']"));
WebElement small = medium.findElement(By.cssSelector("div[class*='Small')]"));