Selenium IDE等待按钮启用

时间:2013-12-18 21:33:45

标签: selenium selenium-ide

我正在测试一个相当复杂的Web应用程序。我可以获得selenium让事情到达屏幕上出现按钮的程度。

我希望selenium在出现后单击该按钮。但是使用waitForElementPresent是不够的,因为当按钮出现时,它会暂时被禁用。

我需要selenium实际上等到按钮可点击之后再尝试点击它。

我没有运气,甚至试图在IDE中找出这是否可行。

感谢您的帮助!
值得重新迭代,现在我只使用IDE。现在......

6 个答案:

答案 0 :(得分:5)

我遇到了与Selenium IDE相同的问题。我正在寻找与Selenium中的ExpectedConditions.elementToBeClickable方法等效的方法。

使用Selenium IDE,以下似乎可用于测试使用disabled属性禁用的表单提交输入。因人而异。根据需要进行调整。

click/clickAndWait/submit/submitAndWait命令之前添加此Selenium IDE命令:

    Command: waitForCssCount
    Target: #submit-button[disabled="disabled"]
    Value: 0

此css选择器匹配ID为submit-button的元素,该元素的disabled属性设置为'已禁用'。此命令将一直等到0次出现,即按钮不再被禁用。

如果您更喜欢使用Xpath表达式而不是CSS选择器,还可以使用waitForXpathCount命令。

注意:在测试过程中,我注意到Selenium IDE有点不稳定,即使使用这个waitForCssCount也始终无法等待。 YMMV。

答案 1 :(得分:4)

我真的建议你转移到使用webdriver'正确',通过IDE自动化复杂的应用程序将导致你最终陷入混乱。然而,这不是你的问题,我已经鼓吹了足够的......

你有几个选项,一个可能就是你从waitForElementPresent变为waitForVisible,因为元素存在只是检查页面上是否存在该元素。

下一个最简单的改变是无法将等待硬编码到你的脚本中,硬编码等待通常是不好的做法,但如果这只是一个快速而肮脏的事情,你可以侥幸使用它,只需使用暂停命令(记住这需要时间,以毫秒而不是秒为单位)。

最后一个选项是使用更高级的功能waitForCondition,它接受一个javascript来评估,这可以对有问题的元素进行额外的检查,可以检查任何标识为已准备好点击的属性。

答案 2 :(得分:1)

我已经看到有一个waitForVisible命令。你可能想尝试一下。 等待DOM加载元素(waitForElementPresent)并且加载的元素实际上变得可见(waitForVisible)可能是两件不同的事情。

答案 3 :(得分:1)

你可以使用waitForElementNotPresent并给出带有disabled属性的按钮CSS。如果disabled属性不存在,则该按钮处于活动状态,因此您可以获得代码。

以下是我用于Selenium IDE的示例:

Command | Target | Value waitForElementNotPresent | css= input[disabled=""]|

您的CSS可能与您的代码不同,例如将disabled =“disabled”作为状态,但原则保持不变。

答案 4 :(得分:0)

所有建议的答案都不适用于我,但我可以使用storeEval来解决它:

storeEval | document.getElementById('opt1').disabled | isEnabled

根据按钮或单选按钮的状态,isEnabled变量为" true"或" false"。

测试用例(对于kantu selenium ide):

{
  "CreationDate": "2018-5-13",
  "Commands": [
    {
      "Command": "open",
      "Target": "http://www.plus2net.com/jquery/msg-demo/radio5.php",
      "Value": ""
    },
    {
      "Command": "storeEval",
      "Target": "document.getElementById('opt1').disabled",
      "Value": "isEnabled"
    }
  ]
}

答案 5 :(得分:0)

使用 CSS 选择器,我能够将 not 伪选择器与 wait for element visible 结合使用。

wait for element visible
css=.btn.btn-primary:not([disabled=disabled])