Ответьте на окно сообщения веб-сайта, автоматизировав InternetExplorer с VBA - PullRequest
1 голос
/ 12 января 2011

Я автоматизирую, то есть из Excel VBA, вот так, частично

Set ie = CreateObject("InternetExplorer.Application")

With ie
    .navigate "http://www.statspass.com/login.asp"
    Do While .Busy: DoEvents: Loop
    Do While .readyState <> 4: DoEvents: Loop

    With .document.forms(0)
        .txtUsername.Value = "username"
        .txtPassword.Value = "*****"
        .submit
    End With

Позже в коде я перехожу на другой URL и получаю некоторые данные.Вчера все работало нормально.Сегодня, когда он попадает в строку «Отправить», веб-сайт отображает окно с сообщением «Другой сеанс выходит из системы».Я установил ie.Visible = True и прошел через код, чтобы понять это.Как написано, окно сообщения не отображается.Когда отображается окно сообщения, оно находится на странице, а .Busy (не показан выше) всегда имеет значение true, поэтому код просто находится в цикле.

Когда ie.Visible = False, нетВ окне сообщения (как я и ожидал) код не задерживается, но при следующем вызове метода Navigate он заканчивается на странице входа (поскольку он еще не вошел в систему), и я получаю сообщение об ошибке, пытаясь получить доступ к определенномутаблицы, которых нет на экране входа в систему.

Мне нужно войти на этот сайт, перейти на определенную страницу и получить информацию из таблицы.Основываясь на том, где сейчас находится мой код, я хочу выяснить, как сказать «ОК» этому окну сообщения, если и когда оно существует.Но если мне нужно сделать шаг назад и рассмотреть альтернативные методы, я не против этого.

Менее важно, но я все еще не понимаю, почему этот код сработал вчера?Я протестировал его, отправил клиенту, который сообщил об этих ошибках, и сегодня я получаю ошибки.

1 Ответ

2 голосов
/ 10 февраля 2011

Когда я сталкивался с подобными ситуациями, я смог обойти эту проблему, выполнив JavaScript, чтобы заменить функцию подтверждения на функцию, которая просто возвращает true, до выполнения действия, которое вызовет предупреждение.

oldConfirm = window.confirm; 
window.confirm = function (msg) { return true; };

Если вы хотите вернуть все обратно, как это было потом, вы можете выполнить следующее ...

window.confirm = oldConfirm; 
oldConfirm = undefined; 

Относительно того, почему это необходимо, если ваш код раньше работал без него, яБоюсь, я понятия не имею.Мне всегда нужно это с Rails / Cucumber / Selenium / Firefox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...