【问题标题】:How to check if an input is disabled with JavaScript in Selenium如何检查 Selenium 中的 JavaScript 是否禁用了输入
【发布时间】:2011-03-28 22:04:46
【问题描述】:

我正在使用 selenium 为 web 应用程序构建和自动化测试脚本,我正在尝试使用 API 的 waifForCondition 函数,它将等待 JS 脚本评估为 true

我目前在页面上有这个来源:

<input id="modifyHostsForm:idDnsIp0_0" type="text" name="modifyHostsForm:idDnsIp0_0" readonly="" disabled="">

应该改为:

<input id="modifyHostsForm:idDnsIp0_0" type="text" name="modifyHostsForm:idDnsIp0_0">

只要我在另一个字段上设置了某个值并在其上触发“模糊”事件(因此该字段变为“启用”)。

我正在尝试执行以下 JS 脚本来测试何时启用此字段(基本上是我从“谷歌搜索”中找到的):

document.getElementbyId('modifyHostsForm:idDnsIp0_0').disabled == false

但是我收到了一个SeleniumException,它表示“对象不支持此属性或方法”。我可以在这里做什么?任何帮助将不胜感激。

【问题讨论】:

  • 附注检查readonly 属性也可以
  • 您是否在代码中使用双等号分配? disabled == false??
  • 不,这不是作业,而是支票。

标签: javascript input selenium


【解决方案1】:

在调查之后,我找到了答案。我在这里记录它以防有人使用它。

我在 FireBug 控制台中运行我的问题代码并且它工作正常;但是在执行我的脚本时,我不断收到SeleniumException

原来你需要使用selenium.browserbot.getCurrentWindow()让RC在你正在使用的主窗口而不是弹出的控制窗口上执行JS脚本。

因此,我实际需要评估的 JS 代码最终是这样的:

selenium.browserbot.getCurrentWindow().document.getElementById('modifyHostsForm:idDnsIp0_0').disabled == false

效果很好。感谢其他提示。

【讨论】:

    【解决方案2】:

    试试

    document.getElementById('modifyHostsForm:idDnsIp0_0').getAttribute('disabled') == false
    

    您可能需要设置一个变量,然后检查它是否已设置或为空,所以:

    var isDisabled = document.getElementById('modifyHostsForm:idDnsIp0_0').getAttribute('disabled')
    

    那么条件变成:

    isDisabled == null || isDisabled == false
    

    【讨论】:

    • 日志现在显示SeleniumException 的以下错误:“'doument.getElementById(...)' is null or not an object”
    • 简单地使用 getElementById().disabled 将始终返回truefalse,没有null。在像我这样的情况下,这更方便。
    【解决方案3】:

    几乎……你需要:

    if(document.getElementById('modifyHostsForm:idDnsIp0_0').disabled == false){
      //                  ^- Capital "B"
      //it is not disabled
    }
    

    【讨论】:

    • if 应该由 selenium 处理,我应该只传递函数来评估。不过我还没有看到大写 B 的东西,我会看看它是如何工作的。
    • 大写B 将异常错误更改为“需要对象”。
    • 我猜这是失败的,因为您试图获取空对象引用的“禁用”属性。你确定这个 ID 为:modifyHostsForm:idDnsIp0_0 的对象存在吗?
    • 是的,我已经使用 Bugzilla 隔离了对象 ID。在执行此脚本的同一屏幕上。
    【解决方案4】:

    还要确保您检查的是isDisabled == undefined:

    isDisabled == null || isDisabled == false || isDisabled == undefined

    【讨论】:

      猜你喜欢
      • 2015-03-12
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多