我只需要对我的应用程序的 UI 测试进行一些操作,并且碰巧发现了一个问题。
登录屏幕具有用户 ID 和密码字段,如果两个字段中都有一些内容,则通过 javascript if 和 onlf 启用登录按钮。
当我录制套件时,按钮被启用并且 selenium 记录操作。
但是当整个套件运行时,登录按钮永远不会启用,并且在等待 30000 毫秒后测试失败。
我是否必须手动启用此按钮或编写测试用例才能启用?这种情况的理想解决方案是什么。
问候,
萨提亚
我只需要对我的应用程序的 UI 测试进行一些操作,并且碰巧发现了一个问题。
登录屏幕具有用户 ID 和密码字段,如果两个字段中都有一些内容,则通过 javascript if 和 onlf 启用登录按钮。
当我录制套件时,按钮被启用并且 selenium 记录操作。
但是当整个套件运行时,登录按钮永远不会启用,并且在等待 30000 毫秒后测试失败。
我是否必须手动启用此按钮或编写测试用例才能启用?这种情况的理想解决方案是什么。
问候,
萨提亚
许多个月前,我在 WatiN 中遇到了类似的行为,其中所有 Javascript 事件不一定都通过测试方法调用。我想有两种方法可以绕过它。一种是显式调用 Javascript 事件,例如 MyTextField.FireEvent("onchange")。另一种方法是直接调用“启用”javascript”方法,例如 MyPage.Eval(“myjavascriptEnableFunction”)。
这两种解决方案都不理想,因为它不模仿用户行为,但这是我能找到的最好的。
如果没有更多信息,就很难确定问题的确切解决方案。但是,我认为 Selenium 确实支持您所需要的。我过去曾遇到过这个确切的问题。
首先,在文本框中输入文本时,会触发相当多的事件。焦点,改变,KeyDown,KeyPress,KeyUp。Selenium 的“类型”命令不会触发这些事件,它只是将文本放在字段中。
为了正确模拟用户的操作,您需要找出哪些事件对相关文本框很重要,并添加至少一行来触发该事件。如果您使用的是 Selenium IDE,只需在 Type 步骤之后触发 KeyPress 事件(FireEvent "keyPress" 或 KeyPress)就足够了。我使用 RC 进行测试,所以我编写了一个方法来模拟输入的每个字符的击键。您可以通过编写触发事件的自定义类型命令来执行相同操作。
例子:
<table>
<tr>
<td>Type</td><td>boxLocator</td><td>Text Input</td></tr>
<tr>
<td>KeyPress</td><td>boxLocator</td><td>t</td></tr></table>
我认为这应该做你想要的并启用按钮。
最后,关于必须在用户操作之外做某事的评论并不完全正确。当用户动作时,浏览器会发生许多不同的动作。如果有的话,Selenium 选择不执行所有这些操作,所以我们只能收拾残局。