Selenium将隐藏的元素返回为可见,可单击并在元素被隐藏且不可单击时启用

时间:2018-07-02 12:56:44

标签: java selenium selenium-webdriver

我只想在过滤器尚未打开的情况下打开它们。为此,我正在检查“应用过滤器”按钮是否可见/可点击。

令我惊讶的是,尽管该元素不是可见/可点击的,但我还是看到了它。

下面提到的按钮代码,

<div class="m-t-20 text-left filter-btn-holder ">
   <input type="hidden" id="filterType" value="">
   <button type="button" class="submit btn btn-primary btn-mini filter-focus" id="filterButton" onclick="javascript:getFilteredMedia(true);" "="">Filter</button>
   <button type="button" class="submit btn btn-danger btn-mini" id="filterButton" onclick="clearFilter();">Reset</button>
   <button type="button" class="submit btn btn-mini" data-webarch="toggle-right-side" id="closeButton"><i class="fa fa-times" aria-hidden="true"></i></button>
</div>

Screenshot when the button is visible

Screenshot when the button is not visible

试图检查元素是否可点击的方法

public boolean isClickable(WebElement el) 
    {
        try{
            WebDriverWait wait = new WebDriverWait(driver, 6);
            wait.until(ExpectedConditions.elementToBeClickable(el));
            return true;
        }
        catch (Exception e){
            return false;
        }
    }

按钮的XPath:xpath = "//button[@id='filterButton' and text()[contains(.,'Filter')]]

3 个答案:

答案 0 :(得分:0)

尝试一下:

public boolean isClickable(WebElement el) 
{
    try{
        WebDriverWait wait = new WebDriverWait(driver, 6);
        wait.until(ExpectedConditions.elementToBeClickable(el));
        return el.isDisplayed() && el.isEnabled();
    }
    catch (Exception e){
        return false;
    }
}

答案 1 :(得分:0)

请使用id = __ multiselect_mediatag的元素代替其子元素。

答案 2 :(得分:0)

尽管我没有确切地得到答案,但是找到了一些解决方法。使用javascript执行程序检查父元素类是否可见。

仍不确定为什么我可以看到不可见的元素。

JavascriptExecutor js = (JavascriptExecutor)driver;
String className = (String) js.executeScript("return document.getElementById('chat-users').getAttribute('class');");