【问题标题】:Invisible element is detected as isDisplayed by Selenium WebDriver, Java不可见元素被 Selenium WebDriver、Java 检测为 isDisplayed
【发布时间】:2015-06-09 21:15:31
【问题描述】:

我有以下包含表单的 HTML 代码:

<div id="bodyLeftBlock" class="">
    <form id="signUpForm" class="" method="post" action="/en/signup/post/" novalidate="novalidate" style="display: none;">
        <input class="" type="hidden" value="am" name="systemsShortCutName">
        <label class="inputTitle translate" translatekey="NAME">Name</label>
        ....
        ....

有时表单会出现在页面上,在这种情况下style="display: none;" 不会出现在页面代码上。

当窗体隐藏时,style="display: none;" 出现在代码中。

我需要区分的是表单呈现与否。

尝试了driver.findElement(By.id("signUpForm")).isDisplayedisEnabled 和其他一些选项 - 永远无法通过我的代码区分表单是否呈现。

这里出了什么问题,有什么诀窍?

【问题讨论】:

    标签: java html selenium selenium-webdriver


    【解决方案1】:
    driver.findElement(By.id("signUpForm")).isDisplayed();
    

    绝对是定义元素是否可见的最可靠和最真实的方法。

    注意isDisplayed()背后有一个相当复杂的逻辑,见:Element Displayedness

    在多个“展示率”指标中,有:

    如果显示样式属性的计算值为“none”,则返回false。


    您也可以尝试等待form 变为可见:

    WebDriverWait wait = new WebDriverWait(driver, 5);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("signUpForm")));
    

    或者,隐形:

    WebDriverWait wait = new WebDriverWait(driver, 5);
    wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("signUpForm")));
    

    【讨论】:

    • 理论上你是对的,但实际上它在这里不起作用。我不知道为什么。这正是问题所在。
    • 正如我在问题中提到的,当表单被隐藏时style="display: none;" 出现在代码中。但是当Form显示时style代码中根本没有提到。
    • @Eliyahu 首先进行健全性检查:您确定有一个包含id="signUpForm"form 元素吗?
    • @Eliyahu 可能是 style 没有明确设置,而是计算出来的。
    • @Eliyahu,谢谢,这是一个公共网站,您可以分享它的链接吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 2012-06-11
    • 2015-05-03
    • 1970-01-01
    • 2014-05-14
    • 2021-03-19
    相关资源
    最近更新 更多