Java中的Selenium WebDriver。通过标签ClassName和父ClassName

时间:2018-08-03 22:29:02

标签: java selenium-webdriver

我需要找到一个标签为 select 和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

您能帮我一个解决方案,以忽略所有我感兴趣的标签之间的标签吗?

谢谢

1 个答案:

答案 0 :(得分:1)

找到元素时,可以通过执行另一个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?),也可能会很有用。