Это можно сделать с помощью метода сна Java. Я протестировал его в FF и IE, и он не блокирует компьютер, не проверяет ресурсы и не вызывает бесконечные попадания на сервер. Мне кажется, это чистое решение.
Сначала вы должны загрузить Java на страницу и сделать ее методы доступными. Для этого я сделал следующее:
<html>
<head>
<script type="text/javascript">
function load() {
var appletRef = document.getElementById("app");
window.java = appletRef.Packages.java;
} // endfunction
</script>
<body onLoad="load()">
<embed id="app" code="java.applet.Applet" type="application/x-java-applet" MAYSCRIPT="true" width="0" height="0" />
Затем все, что вам нужно сделать, когда вы хотите безболезненную паузу в вашем JS, это:
java.lang.Thread.sleep(xxx)
Где xxx - время в миллисекундах. , В моем случае (для обоснования) это было частью выполнения внутреннего заказа в очень маленькой компании, и мне нужно было распечатать счет, который должен был быть загружен с сервера. Я сделал это, загрузив счет (как веб-страницу) в iFrame, а затем распечатал iFrame. Конечно, мне пришлось ждать полной загрузки страницы, прежде чем я смог распечатать, поэтому JS пришлось сделать паузу. Я достиг этого, заставив страницу накладной (в iFrame) изменить скрытое поле формы на родительской странице с помощью события onLoad. И код на родительской странице для печати счета-фактуры выглядел следующим образом (несущественные части вырезаны для ясности):
var isReady = eval('document.batchForm.ready');
isReady.value=0;
frames['rpc_frame'].location.href=url;
while (isReady.value==0) {
java.lang.Thread.sleep(250);
} // endwhile
window.frames['rpc_frame'].focus();
window.frames['rpc_frame'].print();
Таким образом, пользователь нажимает кнопку, скрипт загружает страницу счета, затем ждет, проверяя каждый четверть секунды, чтобы увидеть, закончилась ли загрузка страницы счета-фактуры, а затем всплывающее диалоговое окно печати, чтобы пользователь мог отправить ее на принтер. Что и требовалось доказать.
Я использовал webdriver с firefox. Я был очень доволен.
Что касается примеров кода, это поможет вам начать работу.
Если вы тестируете веб-приложение и хотите написать для этого Python, ознакомьтесь с Selenium RC , чтобы вы могли использовать один и тот же API для всех браузеров.
Насколько я понимаю, PyXPCOM состоит в том, что он предназначен для создания и доступа к компонентам XPCOM, а не для управления существующими. Вы, возможно, вообще не сможете сделать это с помощью PyXPCOM, согласно Марку Хаммонду, первоначальному автору:
и:
Вместо этого вы можете взглянуть на предложенный ранее проект Webdriver, Windmill или MozMill , оба из которые поддерживают автоматизацию Firefox / Gecko / XULRunner через Python.