【问题标题】:How to locate state of a checkbox element with java+selenium which could not be recognized as a checkbox even with javascriptjava - 如何使用java + selenium定位复选框元素的状态,即使使用javascript也无法识别为复选框
【发布时间】:2018-06-25 15:41:11
【问题描述】:

我正在为 aviasales.com 网站实施测试用例,并且正在尝试验证复选框的状态。

我可以很容易地找到复选框,甚至可以通过以下方式点击它:

WebElement checkboxValue = driver.findElement(
      By.xpath("//label[@class='mewtwo-show_hotels__label']"));
            checkboxValue.click();

问题是boolean bool = checkboxValue.isSelected();即使被选中也只返回false

我在 Google 上搜索了很多,并找到了使用 JavaScript 的建议,所以我在 Java 实现之前从控制台尝试过,但同样的事情发生了 - 总是错误的:

var field = document.getElementsByClassName("mewtwo-show_hotels__label");
if (field[0].checked == true) {alert("1")} else {alert("2")}

无论复选框条件是什么(选中与否),我都只收到 2 警报

如果 chrome 定位器在源代码中将复选框标识为 ::before,我还能在这里尝试什么?

谢谢!

【问题讨论】:

    标签: javascript java selenium checkbox


    【解决方案1】:

    只查询复选框,而不是标签

    您需要选择具有mewtwo-show_hotels__*checkbox* 类的元素(不是mewtwo-show_hotels__*label*

    您会看到标签,但它的样式只是反映隐藏的复选框状态

    【讨论】:

    • 看起来,但是我怎样才能找到复选框的特定类,我尝试应用这个,但仍然找不到复选框stackoverflow.com/questions/40885637/…
    • @AlekseyKiselev 查看 DOM。你会在你看到的标签附近找到<input type="checkbox" ...>
    • var field = document.getElementById('flights_show_hotels_id--whitelabel_en'); if (field.checked == true) {alert("1")} else {alert("2")} 返回正确的结果!感谢您的帮助!
    • 试试boolean isSelected = driver.findElement( By.xpath("//input[@class='mewtwo-show_hotels-checkbox']")).isSelected();
    【解决方案2】:

    您应该找到复选框的实际元素。你应该使用的是不正确的,因为它是标签。

    但除此之外还有一些元素:
    输入类 - memtwo-hotels-checkbox
    带类的 div - memtwo-custom_checkbox_wrapper
    您更有可能确定某些属性是选定的元素。如果在此之后您找不到任何特殊属性,请联系您的 DEV 团队并询问是否提供该属性。

    您有自定义复选框,这就是任何标准功能都不起作用的原因。所以回到 html 代码并尝试在 div 中找到一些在您选中和取消选中时会发生变化的属性。当您找到特殊属性时,您需要在 java 中执行类似的操作:
    if (element.getAttribute(MySpecialAttribute) != null) { //code here }

    希望对你有帮助。

    【讨论】:

    • 他们不是我的开发团队,这是我的学习项目..会尝试
    • var field = document.getElementsByClassName("mewtwo-custom_checkbox"); if (field[0].checked == true) {alert("1")} else {alert("2")} 一直返回 2
    • 你没有明白这一点。您有自定义复选框,这就是任何标准功能都不起作用的原因。所以回到 html 代码并尝试在 div 中找到一些在您选中和取消选中时会发生变化的属性。当您找到特殊属性时,您需要在 java 中执行类似的操作:if (element.getAttribute(MySpecialAttribute) != null) { //code here }
    • var field = document.getElementById('flights_show_hotels_id--whitelabel_en'); if (field.checked == true) {alert("1")} else {alert("2")} 返回正确的结果!谢谢!
    猜你喜欢
    • 2016-04-29
    • 2014-07-29
    • 2023-03-13
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 2023-03-13
    相关资源
    最近更新 更多