Упорядочивание команд Selenium для подсказок JavaScript один за другим - PullRequest
0 голосов
/ 06 октября 2009

Один скрипт, который у нас есть, запрашивает у пользователя несколько значений посредством последовательных вызовов JavaScript для window.prompt (). Selenium записывает это действие, как текст подсказки, так и введенные мною значения, но, похоже, оно не может воспроизвести его должным образом. Он «преуспевает» в том, что никаких ошибок не возникает, но только первое значение подсказки фактически возвращает его в мой сценарий. Кроме того, упорядоченные записи Selenium по умолчанию возвращают значение second на месте первого, а остальные остаются пустыми:

# [info] Executing: |answerOnNextPrompt | TEXT1 | |
# [info] Executing: |select | id | label=mychoice |
# [info] Executing: |answerOnNextPrompt | TEXT2 | |
# [info] Executing: |assertPrompt | Please enter a value for q1 | |
# [info] Executing: |answerOnNextPrompt | TEXT3 | |
# [info] Executing: |assertPrompt | Please enter a value for q2 | |
# [info] Executing: |answerOnNextPrompt | TEXT4 | |
# [info] Executing: |assertPrompt | Please enter a value for q3 | |
# [info] Executing: |assertPrompt | Please enter a value for q4 | | 

Я переставил это в то, что мне кажется более разумным:

# [info] Executing: |answerOnNextPrompt | TEXT1 | |
# [info] Executing: |select | id | label=mychoice |
# [info] Executing: |assertPrompt | Please enter a value for q1 | |
# [info] Executing: |answerOnNextPrompt | TEXT2 | |
# [info] Executing: |assertPrompt | Please enter a value for q2 | |
# [info] Executing: |answerOnNextPrompt | TEXT3 | |
# [info] Executing: |assertPrompt | Please enter a value for q3 | |
# [info] Executing: |answerOnNextPrompt | TEXT4 | |
# [info] Executing: |assertPrompt | Please enter a value for q4 | | 

После этого я получаю TEXT1 в качестве первого значения, но остальное остается пустым.

Я также пробовал waitForPrompt вместо каждого assertPrompt, но без кубиков.

Я предполагаю, что Selenium не может справиться с этой ситуацией, потому что answerOnNextPrompt, похоже, должен предшествовать действию, которое вызывает приглашение, но является действием, которое запускает следующее приглашение, поэтому после первый, вызванный select, сделать это невозможно, потому что они не складываются.

Хотелось бы, чтобы меня ошиблись ... какие-нибудь идеи?

(Если нет, я мог бы сообщить об этом как об ошибке / что-то, что они должны изменить в API, возможно, комбинируя answerOnNextPrompt с assertPrompt: он мог бы просто принять необязательный аргумент с тем, как на приглашение следует ответить.)

Платформа - Selenium IDE 1.0.2 на Firefox 3.5.3 на win32.

Ответы [ 2 ]

3 голосов
/ 06 октября 2009

Это определенно похоже на ограничение в Selenium. Следующее из источника selenium-browserbot.js:

windowToModify.prompt = function(message) {
    browserBot.recordedPrompts.push(message);
    var result = !browserBot.nextConfirmResult ? null : browserBot.nextPromptResult;
    browserBot.nextConfirmResult = true;
    browserBot.nextPromptResult = '';
    self.relayBotToRC.call(self, "browserbot.recordedPrompts");
    return result;
};

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

Обновление:

Нечто подобное произойдет и для последовательных подтверждений JavaScript. Первый будет использовать ответ, заданный выбором * OnNextConfirmation, а все последующие подтверждения автоматически выберут OK (true).

windowToModify.confirm = function(message) {
    browserBot.recordedConfirmations.push(message);
    var result = browserBot.nextConfirmResult;
    browserBot.nextConfirmResult = true;
    self.relayBotToRC.call(self, "browserbot.recordedConfirmations");
    return result;
};
0 голосов
/ 06 октября 2009

Как насчет этого:

# [info] Executing: |select | id | label=mychoice |
# [info] Executing: |answerOnNextPrompt | TEXT1 | |
# [info] Executing: |assertPrompt | Please enter a value for q1 | |
# [info] Executing: |answerOnNextPrompt | TEXT2 | |
# [info] Executing: |assertPrompt | Please enter a value for q2 | |
# [info] Executing: |answerOnNextPrompt | TEXT3 | |
# [info] Executing: |assertPrompt | Please enter a value for q3 | |
# [info] Executing: |answerOnNextPrompt | TEXT4 | |
# [info] Executing: |assertPrompt | Please enter a value for q4 | |

Кстати, почему бы не использовать обычную HTML-форму вместо стольких раздражающих запросов javascript?

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