一个接一个JavaScript提示的Selenium命令排序

一个接一个JavaScript提示的Selenium命令排序,selenium,automated-tests,Selenium,Automated Tests,我们有一个脚本通过对window.prompt()的连续JavaScript调用向用户询问一些值。Selenium记录了这个动作,包括提示文本和我输入的值,但它似乎无法正常播放。它“成功”的原因是没有错误发生,但只有第一个提示值实际返回到我的脚本。此外,默认的顺序Selenium记录使第二个值返回到第一个值的位置,其余值仍然为空: # [info] Executing: |answerOnNextPrompt | TEXT1 | | # [info] Executing: |select | i

我们有一个脚本通过对window.prompt()的连续JavaScript调用向用户询问一些值。Selenium记录了这个动作,包括提示文本和我输入的值,但它似乎无法正常播放。它“成功”的原因是没有错误发生,但只有第一个提示值实际返回到我的脚本。此外,默认的顺序Selenium记录使第二个值返回到第一个值的位置,其余值仍然为空:

# [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触发的第一个提示之后,无法执行该操作,因为它们不堆叠

不过我想被证明是错的…有什么想法吗

(如果不是,我可能会将其报告为一个bug/他们需要在API中更改的内容,可能是通过将answerOnNextPrompt与assertPrompt结合使用:它可以只接受一个可选参数,说明应该如何回答提示。)

平台是win32上Firefox 3.5.3上的Selenium IDE 1.0.2。

这个怎么样:

# [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提示呢?

这个怎么样:

# [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提示?

这显然是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确认,也会发生类似的情况。第一个将使用choose*OnNextConfirmation设置的响应,并且所有后续确认将自动选择OK(true)


这显然是硒的限制。以下内容来源于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确认,也会发生类似的情况。第一个将使用choose*OnNextConfirmation设置的响应,并且所有后续确认将自动选择OK(true)


哪一个是重新排序测试后的结果?抱歉,这不是很清楚,我已经编辑了它。哪一个是重新排序测试后的结果?抱歉,这不是很清楚,我已经编辑了它。我刚刚尝试过,它只是将TEXT1放在第一个值中,其余值仍然为空。我们正在模拟一个用户界面,每个人都已经习惯了这个环境。总有一天会改变的,别担心PI只是尝试了一下,它只是把TEXT1放在第一个值中,其余的还是空白。我们正在模拟一个用户界面,每个人都已经习惯了这个环境。总有一天会改变的,别担心P