java - 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
你能帮我解决一下忽略我感兴趣的标签之间的所有标签吗?
谢谢,
解决方案
当您定位一个元素时,您可以通过调用另一个 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?)也可能很有用。
推荐阅读
- npm-install - 如何修复 Gridsome.js 中的错误?
- javascript - 这些反应出口有什么区别?
- sql - 多表小计
- audit.net - 什么是默认行为 InsertEvent 或 InsertEventAsync
- serverless-framework - 无服务器:TypeError:无法读取未定义的属性“阶段”
- flutter - 如何在颤动中垂直和水平地居中 CircularProgressIndicator
- mysql - 存储过程MYSQL中的减法
- autodesk-viewer - 我们可以在 Forge Viewer 上加载和可视化的任何限制(文件大小或占地面积或层数)?
- javascript - setTimeout 在 addEventListener 中让应用每 100 个 addEventListener 事件休息一下
- notepad++ - Notepad++ 目录替换