【发布时间】:2012-02-13 20:50:46
【问题描述】:
用户可以在运行 selenium IDE 脚本时手动输入吗? 例如。如果有名称字段,那么我们可以在每次脚本运行时打开输入框,以便用户可以在名称字段中输入他的输入吗?
让我知道这是否可能..
如果是,请给我一个解决方案。
提前致谢
【问题讨论】:
标签: testing selenium automation user-input selenium-ide
用户可以在运行 selenium IDE 脚本时手动输入吗? 例如。如果有名称字段,那么我们可以在每次脚本运行时打开输入框,以便用户可以在名称字段中输入他的输入吗?
让我知道这是否可能..
如果是,请给我一个解决方案。
提前致谢
【问题讨论】:
标签: testing selenium automation user-input selenium-ide
截至 2020 年,使用 Selenium IDE 3.16.1,我发现以下配置适用于上述建议的答案。 (我重新回答了问题,因为上面的答案没有清楚地结合所有部分)
Command : execute script
Target : return prompt("Question Text","Default value");
Value : yourVariableName
并用存储的var填写输入框:
Command : type
Target : (your selector)
Value : ${yourVariableName}
【讨论】:
没有一个被接受的答案对我有用。以下是我的解决方法:
创建新命令(在顶部存储我想在 30 个位置使用的变量。)
然后在 30 个地方我想使用该变量。我把这个
【讨论】:
您可以使用以下脚本调用 javascript 提示符以获取值
<tr>
<td>storeEval</td>
<td>prompt("Please enter your FirstName")</td>
<td>firstName</td>
</tr>
那么访问值就是使用${firstName}的情况。
编辑:从 Selenium IDE 2.5.0 开始,脚本需要如下所示:
<tr>
<td>storeEval</td>
<td>javascript{prompt("Please enter your FirstName")}</td>
<td>firstName</td>
</tr>
【讨论】:
store而不是storeEval吗?那会更有意义。
executeScript 与第二个参数一起使用,其中仅包含带有 return 语句的 JS(否则不会将任何内容存储在目标变量中) 反而。现在创建一个新答案,还是仅扩展这个答案仍然可以接受?
使用 Thread.Sleep(20000); 这会将所有内容冻结 20 秒,您可以在该时间段内手动输入要输入的任何字段
【讨论】:
在 Selenium IDE 2.8.0 中: 捕获输入登录名和密码的测试会话。编辑每个命令,将“type”更改为“waitForText”,并删除先前为登录名和密码存储的 Value 字段中的值。从 IDE 重新运行保存的测试脚本。
【讨论】:
建议的解决方案适用于 selenium IDE(针对 2.5 测试)
<tr>
<td>store</td>
<td>javascript{prompt("password")}</td>
<td>password</td>
</tr>
【讨论】:
只是对 Stephen Binns 的回应稍作修改。我正在运行 Selenium IDE 2.5.0,我的测试如下所示:
<tr>
<td>store</td>
<td>javascript{prompt("password")}</td>
<td>password</td>
</tr>
没有 javascript{} 它不会提示。
【讨论】:
既然您专门询问了 Selenium IDE,答案是否定的。但是您可以暂停脚本并让用户输入他们的姓名,然后让脚本继续运行。我听说有人使用这种技术来处理验证码,这当然不容易自动化。
【讨论】:
您可以使用建议的技术here,它使用 Selenium WebDriver 和 Java 的 BufferedReader。我认为它不能适用于 Selenium IDE,但该技术应该适用于 Selenium RC。
基本思路是:
调用以下代码将用户输入捕获到 BufferedReader。
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
reader.readLine();
(注意,如果您使用的是 C#,有一个讨论 here 关于如何使用 Console.In.ReadLine(); 而不是 BufferedReader)。
【讨论】: