Я могу нажать кнопку в Firefox - почему не в Chrome?

Я использую Watir WebDriver с Chrome и Firefox.

С помощью FF я могу нажать следующую кнопку:

@browser.button(:id => 'btnSubmit').when_present.click

С Chrome я получаю следующее сообщение:

Selenium::WebDriver::Error::UnknownError: unknown error: Element is not clickable at point (730, 681). Other element would receive the click: <div class="blockUI blockOverlay" style="z-index: 1000; border: none; margin: 0px; padding: 0px; width: 100%; height: 100%; top: 0px; left: 0px; background-color: rgb(0, 0, 0); opacity: 0.38143215011627357; cursor: default; position: fixed;"></div>

Если я поставлю точку останова на ошибочную строку, следующий шаг в режиме отладки будет работать нормально.

В качестве эксперимента, в случае проблем с тайм-аутом, я изменил код на:

@browser.button(:id => 'btnSubmit').when_present(100).click

Это не работает в режиме выполнения с той же ошибкой.

Если я ищу всю страницу, я не могу найти "другой элемент", который получил бы клик.

<div class="blockUI.............

Вот div'ы до и после кнопки:

<div id="divSaveCancel" class="row">
    <div class="six mobile-four columns">
        <ul class="button-group even three-up">
            <li>
                <button id="cancelBtn" type="button" class="small alert button">
                    Cancel</button></li>
            <li>
                <button class="small button" id="btnSave" type="submit" name="command" value="btnSaveDraft"
                    onclick="beforeSubmit();">
                    Save Draft</button></li>
            <li>
                <button class="small success button" id="btnSubmit" type="submit" name="command"
                    onclick="beforeSubmit();" value="btnSubmit">
                    Save and Continue</button>
            </li>
        </ul>
    </div>
    <div class="six mobile-four columns" style="text-align: right;">
        <span style="text-align: right; margin-right: 5%; vertical-align: middle; width: 100%;">
            <button id="btnSendNotification2" class="small button" type="button">
                Send Notification</button></span>
    </div>
</div>

2 ответа

Решение

Вместо того, чтобы делать:

while (@browser.div(:class => 'blockUI blockOverlay').present?)
  sleep(1)
end
@browser.button(:id => 'btnSubmit').click

Вы должны быть в состоянии сделать:

@browser.div(:class => 'blockUI blockOverlay').wait_while_present
@browser.button(:id => 'btnSubmit').click

@JustinKo: я проверял оба.

Вот комментарий от разработчика:

Это модальное всплывающее окно "Пожалуйста, подождите...", которое появляется в течение очень короткого промежутка времени, когда документ загружается или когда выполняется какое-то трудоемкое действие. Этот код динамически внедряется плагином JQuery и вскоре удаляется. Это может быть причиной того, что мы не можем найти ее в источнике документа.

Помните, что следующее не сработало:

@browser.button(:id => 'btnSubmit').when_present(100).click

Но следующие работы:

sleep(1)
@browser.button(:id => 'btnSubmit').click

Таким образом, целевой элемент всегда присутствует.

Следующее не работает:

while !(@browser.button(:id => 'btnSubmit').visible?)
  sleep(1)
end
@browser.button(:id => 'btnSubmit').click

Таким образом, целевой элемент всегда виден.

Решение состоит в том, чтобы дождаться исчезновения "другого элемента":

while (@browser.div(:class => 'blockUI blockOverlay').present?)
  sleep(1)
end
@browser.button(:id => 'btnSubmit').click
Другие вопросы по тегам