Selenium возвращает скрытый элемент как видимый, кликабельный и включенный, когда элемент скрыт и не кликабелен - PullRequest
0 голосов
/ 02 июля 2018

Я хочу открыть фильтры, только если они еще не открыты. Для этого я проверяю, является ли кнопка «Применить фильтр» видимой / активируемой.

К моему удивлению, я получаю элемент как видимый / кликабельный, хотя это не так.

Код кнопки, указанный ниже,

<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 голосов
/ 03 июля 2018

Пожалуйста, используйте элемент с id = __ multiselect_mediatag вместо его дочерних элементов.

0 голосов
/ 09 июля 2018

Хотя я точно не получил ответ, нашел какой-то обходной путь. Проверен класс родительского элемента, если он виден или не используется исполнителем javascript.

Все еще не уверен, почему я становлюсь видимым для невидимого элемента.

JavascriptExecutor js = (JavascriptExecutor)driver;
String className = (String) js.executeScript("return document.getElementById('chat-users').getAttribute('class');");
0 голосов
/ 02 июля 2018

Попробуйте это:

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...