首页 > 解决方案 > Java 中的 Selenium WebDriver。按标签 ClassName 和父 ClassName 选择

问题描述

我需要找到一个带有标签选择和 ClassName的元素

fare-finder__calendar__month-selector__dropdown

这是在具有 ClassName的div中

fare-finder__calendar--outbound

问题是它们之间还有我不关心的其他 div。目前我正在使用以下解决方案:

driver.findElement(By.cssSelector("div.fare-finder__calendar--outbound div div div div label select.fare-finder__calendar__month-selector__dropdown")).click();

但我想摆脱它们之间的标签

div div div div label

你能帮我解决一下忽略我感兴趣的标签之间的所有标签吗?

谢谢,

标签: javaselenium-webdriver

解决方案


当您定位一个元素时,您可以通过调用另一个 findElement 来定位该元素内的元素。

driver.findElement(By.cssSelector("div.fare-finder__calendar--outbound")).findElement(By.cssSelector("select.fare-finder__calendar__month-selector__dropdown"));

您还可以使用(明智的)xpath:

By.xpath("//div[@class='parentElementClass']//select[@class='childElementClass']");

我对 CSS 选择器不太熟悉,但它应该允许任何子位置:

driver.findElement(By.cssSelector("div.fare-finder__calendar--outbound select.fare-finder__calendar__month-selector__dropdown")).click();

您不需要指定其间的所有元素,即用 > 字符表示。

更新

我已经编辑了上面的代码以正确编译,并完全代表您的页面实际类。测试并针对此模拟页面运行https://5d70fb99-bb95-4031-bdec-e46bd79a44fd.htmlpasta.com/

如果这些定位器都不起作用,那么您正在自动化的实际页面可能会有些奇怪。发布重现问题的最小 HTML 代码,以及您正在使用的 Selenium-Webdriver 版本以及您正在使用的驱动程序(Chrome、Firefox、IE、Edge?)也可能很有用。


推荐阅读