不可见元素被Selenium WebDriver,Java显示为isisibleed

时间:2015-06-09 21:15:32

标签: java html selenium selenium-webdriver

我有以下包含表单的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以及更多选项 - 我的代码永远无法区分是否提供了表单。

这里有什么问题,诀窍是什么?

1 个答案:

答案 0 :(得分:2)

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")));