mootools, watr webdriver onmouseover не действуют - PullRequest
1 голос
/ 05 декабря 2011

Мой тест показывает, что webdriver fire_event ("onmouseover") не действует, когда на странице есть библиотека mootools lib.при удалении библиотеки mootools, fire_event ("onmouseover") вступает в силу.Как я могу обойти?

html-страница выглядит следующим образом:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script type='text/javascript' src='http://demos111.mootools.net/demos/mootools.svn.js'></script></head>
<body>
    <div onmouseover="document.getElementById('id6').style.display='block';" 
        onmouseout="document.getElementById('id6').style.display='none';"
        style="overflow:hidden;" id="id61" class="trbgcolor0">
        <div style="height: 18px;">
                <div style="float: left; ">
                        <b>plan category 2682</b>
                        <a class="unline"> add 1</a>
                </div>

                <div style="display: none;" id="id6">
                        &nbsp;|&nbsp;<a class="unline">edit 1</a>
                        |&nbsp;<a class="unline">delete</a>
                </div>
           </div>                                                
    </div>
</body>
</html>

следующее:

require "rubygems"
require "watir-webdriver"

require 'test/unit'

class TC_article_example < Test::Unit::TestCase

  def test_search

    browser = Watir::Browser.new :firefox
    browser.goto("http://192.168.88.120/mgt/login/t2.html")

    sleep 1
    oo = browser.div(:id=>"id61")    
    oo.fire_event "onmouseover"
    puts "2  001 "
  end

end

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Я был бы склонен спросить об этом у пользователей mootools, я бы догадался, что это каким-то образом перехватывает событие, поэтому элемент браузера никогда не «видит» его при запуске, но это всего лишь предположение.

Их инструменты могут также добавлять какую-то другую логику CSS или что-то еще, что определяет, является ли этот элемент скрытым или видимым, я часто видел это с правилами, которые используют комбинацию типа элемента и класса вместе с ним.с: hover psuedoclass для реализации меню

Для элементов управления, которые используют исключительно CSS для управления видимостью элемента, я пока не смог найти способ (пока) вызвать состояние «зависания», которое распознается вуровень браузера, чтобы правила CSS: hover вступали в силу и вызывали появление элементов меню.

Решение может заключаться в том, чтобы принудительно изменить видимость элемента, по существу выполняя тот же код сценария, которыйзапустить через onmouseover и посмотреть, заставит ли этот элемент отображаться.

browser.execute_script("document.getElementById('id6').style.display='block';")

Если это не сработает, вы можете быть в состоянии манипулировать вещами на уровне CSS, временно изменяя конкретный элемент управления стилем.Я сделал это с помощью Jquery (поскольку наше приложение уже использует его), используя этот общий формат

browser.execute_script("jQuery('CSS-Rule-Name').css({display: 'block'});")

В моем конкретном случае код для раскрытия всех раскрывающихся меню в конечном итоге выглядит следующим образом

browser.execute_script("jQuery('.navigation #secondary_nav > li ul.tertiary_nav').css({display: 'block'});")

Это, конечно, должно быть адаптировано к вашему коду, так как правило CSS, скорее всего, будет другим.Я нашел это правило, используя инструменты разработчика, выбрав элемент контейнера для меню в dom, затем выбрал «trace styles» и раскрыл свойство «display», которое должно дать вам конкретное правило CSS (в моем случае этоis .navigation #secondary_nav > li ul.tertiary_nav), который управляет отображением (обычно «none» или «block») элемента.(будут добавлены другие аналогичные правила с добавлением :hover, которые вступят в силу, когда браузер определит, что мышь наводит курсор на соответствующий элемент)

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

Если это действие не вызывает обновления страницы, вы можете снова скрыть меню, используя тот же сценарий, но установив для него значение «none» вместо «block»

0 голосов
/ 06 декабря 2011

Обходной путь: browser.execute_script ("abc (true)")

onmouseover="abc(true);" 
onmouseout="abc(false)"
...