【问题标题】:Selenium does not enable a buttonSelenium 不启用按钮
【发布时间】:2012-02-28 17:50:37
【问题描述】:

我只是在我的应用程序的 UI 测试中玩了一下,碰巧发现了一个问题。

登录屏幕有用户 ID 和密码字段,如果两个字段中都有一些内容,则通过 javascript if 和 onlf 启用登录按钮。

当我录制套件时,按钮会启用,selenium 会记录操作。

但是当整个套件运行时,登录按钮永远不会启用,并且在等待 30000 毫秒后测试失败。

我是否必须手动启用此按钮或编写测试用例才能启用?这种情况的理想解决方案是什么。

问候,

萨提亚

【问题讨论】:

    标签: testing selenium selenium-ide gui-testing ui-testing


    【解决方案1】:

    几个月前,我在 WatiN 中遇到了类似的行为,其中所有 Javascript 事件不一定通过测试方法调用。我想有两种方法可以绕过它。一种是显式调用 Javascript 事件,例如 MyTextField.FireEvent("onchange")。另一种方法是直接调用“启用”javascript”方法,例如 MyPage.Eval("myjavascriptEnableFunction")。

    这两种解决方案都不理想,因为它不模仿用户行为,但这是我能找到的最好的。

    【讨论】:

      【解决方案2】:

      如果没有更多信息,就很难确定问题的确切解决方案。但是,我认为 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 选择不执行所有这些操作,所以我们只能收拾残局。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-27
        • 1970-01-01
        • 1970-01-01
        • 2022-11-21
        • 2021-08-03
        • 2010-11-22
        • 1970-01-01
        相关资源
        最近更新 更多