getAttribute не возвращает полное значение для стиля в селене

Я использую метод selenium getAttribute("style") для следующего элемента id: -

<div id="ntsDiv_1" style="width: 250px; text-align: left; white-space: normal; top: 1090px; left: 131px; visibility: hidden;" class="mlt-pop-container">

но API возвращает только половину значения. Он возвращает width: 250px; text-align: left; white-space: normal;, а оставшаяся часть стиля обрезается.

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

Я казнил System.out.println("Style is:- "+super.getElement(NEXTAG_STORES_DIV).getAttribute("style"));

NEXTAG_STORES_DIV соответствует xpath элемента id, а super.getElement извлекает элемент по xpath

Пожалуйста, помогите мне!


person vipin8169    schedule 26.02.2013    source источник
comment
Ну какая версия Selenium? Какой браузер? Это на каком языке?   -  person Arran    schedule 26.02.2013
comment
использую Junit, firefox, версию не знаю   -  person vipin8169    schedule 26.02.2013
comment
Не лучше ли узнать? Какая версия фаерфокса?   -  person Arran    schedule 26.02.2013
comment
firefox 17.0, не знаю, как найти версию селена, гуглил, но не смог найти   -  person vipin8169    schedule 26.02.2013
comment
Ну, JAR, которые вы используете, как они называются? Они будут в формате selenium-java-version.jar.   -  person Arran    schedule 26.02.2013
comment
позвольте мне попытаться найти его,   -  person vipin8169    schedule 26.02.2013
comment
Где найти эту банку, не могу найти   -  person vipin8169    schedule 26.02.2013
comment
пожалуйста, не минусуйте этот вопрос, иначе мне будет запрещено задавать вопросы. Пожалуйста, ответьте на этот запрос вместо этого   -  person vipin8169    schedule 26.02.2013
comment
Вы не устанавливали эту машину? Вы бы сослались на банку в своей среде IDE (возможно, Eclipse или что-то еще, что вы используете). Я не могу видеть ваш экран.   -  person Arran    schedule 26.02.2013
comment
Нет, я не устанавливал. Это было предварительно настроено для меня   -  person vipin8169    schedule 26.02.2013
comment
хорошо, проверил, версия 2.25.0   -  person vipin8169    schedule 26.02.2013
comment
пожалуйста, помогите мне, я сказал вам версию   -  person vipin8169    schedule 26.02.2013
comment
Вам нужно обновить Селениум. Версия 2.25 устарела примерно на 7 месяцев.   -  person Arran    schedule 26.02.2013
comment
Ok. пожалуйста, удалите отрицательный голос, который вы поставили здесь по этому вопросу. Пожалуйста !   -  person vipin8169    schedule 26.02.2013
comment
я боюсь, если я могу обновить его, я использую официальную систему :(   -  person vipin8169    schedule 26.02.2013
comment
пожалуйста, удалите отрицательный голос.   -  person vipin8169    schedule 26.02.2013
comment
Я не минусовал вопрос??? Обновление Selenium может не решить проблему, но, по крайней мере, вы должны попытаться использовать последнюю версию, чтобы узнать, была ли ваша проблема известна и исправлена ​​​​в более поздней версии.   -  person Arran    schedule 26.02.2013
comment
спасибо, что проголосовали. Боюсь, я не могу обновить свой селен. придется искать обходной путь :(   -  person vipin8169    schedule 26.02.2013
comment
Если вы просто хотите проверить видимость элемента, попробуйте вызвать для него isDisplayed(), а не проверять атрибут стиля.   -  person zodvik    schedule 27.02.2013


Ответы (1)


Я только что попробовал это с Selenium 2.30.0, и он отлично работает, возвращается весь атрибут.

Попробуйте следующее (во всех примерах предполагается, что element — это WebElement, которое вам нужно протестировать):

  1. Убедитесь, что действительно возвращается только часть атрибута. Разве вы не просто печатаете это в консоли? Многие консоли имеют ограниченную длину строки. Попробуйте настроить консоль на отображение длинных строк. Программно проверьте длину возвращаемого значения или попробуйте вычислить

    element.getAttribute("style").contains("visibility")
    
  2. Попробуйте обновить свою библиотеку Selenium, если сможете. Я не знаю ни одной ошибки, связанной с получением атрибутов, но, возможно, были некоторые, которые сейчас (в версии 2.30.0) решены.

  3. Попробуйте в другом браузере/ОС/архитектуре. Если где-то это работает, вы будете знать, что это проблема конкретного браузера/драйвера/ОС/архитектуры/чего-то еще, и вы сможете сосредоточиться на ней и либо исправить, либо сообщить об ошибке.

  4. Если вы просто хотите узнать, виден элемент или нет, правильный и обычно предпочтительный способ — вызвать

    element.isDisplayed()
    

    Этот метод позаботится обо всех правилах, которые вам могут понадобиться для проверки, чтобы определить, виден ли он на самом деле или нет.

  5. Если значение style динамически изменяется на странице (т. е. оно не записано статически в исходном коде страницы), WebDriver не может его увидеть, поскольку оно не улавливает динамические изменения. Попробуйте получить доступ к значению через JavaScript:

    if (!driver instanceof JavascriptExecutor) {
        throw new IllegalStateException("JavaScript not enabled for this driver!");
    }
    JavascriptExecutor js = (JavascriptExecutor)driver;
    String styleAttribute = (String)js.executeScript("return arguments[0].style", element);
    
  6. Если вам действительно нужно получить вычисленное значение атрибута CSS visibility, фактически используется браузером, а не в атрибуте style (если его нет или он каким-то образом переопределен), вам нужно использовать getComputedStyle(). Один из способов (описанный в этой статье на quirksmode.org) заключается в следующем:

    var elem = arguments[0];
    if (elem.currentStyle) {
        var vis = elem.currentStyle['visibility'];
    } else {
        var vis = document.defaultView.getComputedStyle(elem, null).getPropertyValue('visibility');
    }
    return vis;
    

    Опять же, это должно быть вызвано через

    String visibility = (String)js.executeScript(here_goes_the_whole_script, element);
    
person Petr Janeček    schedule 26.02.2013
comment
Спасибо за помощь. На самом деле проблема заключалась в том, что значение атрибута стиля видимости становится видимым после наведения курсора на ссылку, что приводит к всплывающему окну. Атрибут видимости определен для этого всплывающего окна, когда-то использовал super.pause, и я смог увидеть все встроенные атрибуты. - person vipin8169; 27.02.2013
comment
Но я не уверен, почему значения атрибута remaninig не появляются, поскольку они все еще видны мне в firebug, даже когда всплывающее окно не видно - person vipin8169; 27.02.2013