我正在测试一个相当复杂的Web应用程序。我可以获得selenium让事情到达屏幕上出现按钮的程度。
我希望selenium在出现后单击该按钮。但是使用waitForElementPresent是不够的,因为当按钮出现时,它会暂时被禁用。
我需要selenium实际上等到按钮可点击之后再尝试点击它。
我没有运气,甚至试图在IDE中找出这是否可行。
感谢您的帮助!
值得重新迭代,现在我只使用IDE。现在......
答案 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])