我使用Selenium2 web测试相当复杂的web应用程序的图形用户界面。由于我在加载元素时确实遇到了一些失败,所以想知道关键字之间有什么区别:
等待,直到元素启用,定位器,,直到元素可见,定位器,等待,直到页面包含元素定位器
当我想检查页面的元素是否已完全加载并准备使用时,哪一个关键字是最可靠的?是否有关键字检查是否加载了整页?
发布于 2018-02-23 16:45:05
我不知道你所说的“范围”是什么意思。它们都在同一范围内工作。
Wait Until Element Is Enabled假设元素存在于页面上,并等待元素启用(不是只读,也不是禁用)。如果元素不存在,它将立即失败(如果有隐式等待,则在超时之后)。
Wait Until Element is Visible假定元素存在于页面上,并将一直等到元素可见为止。如果元素不存在,它将立即失败(如果有隐式等待,则在超时之后)。
Wait Until Page Contains Element对元素不作任何假设。它一直等到元素实际出现在页面上,而不管它是可见的、不可见的、启用的还是禁用的。它不需要隐式等待,因为这个关键字是显式等待。
哪一个关键字是最可靠的情况下,当我想检查元素的页面是否已完全加载和准备使用?
最完整的解决方案是等待它出现在页面上,等待它可见,然后等待它被启用。
如果元素总是在页面上,您可以跳过第一个检查(即:如果没有可以创建或删除元素的javascript )。
如果元素始终处于启用状态,则不需要等待它启用(即:如果没有javascript来禁用或启用元素)
对于简单的静态页面,您只需要检查元素是否可见。即使这样也不是必要的,因为selenium在加载页面之前不会在打开页面时返回。当页面是动态的时,问题就出现了。也就是说,当有javascript可以改变页面上的内容以及它是可见的还是启用的时候,在html加载之后。
是否有关键字检查是否加载了整页?
不,因为“被加载”在不同的应用程序中可能有不同的含义。浏览器将在加载html后将变量document.readyState设置为“完成”。你可以用像Wait for condition return window.document.readyState === 'complete'这样的机器人来检查它。同样,如果您有运行在页面上的javascript,这可能是不够的,因为页面在加载初始HTML之后可能会发生变化。
没有一个单一的解决方案可以适用于所有的应用程序。这取决于您了解应用程序在启动时正在做什么,并进行适当的检查。
有关如何使用原始python和selenium完全加载页面的详细讨论,请参阅博客如何在单击后获取Selenium以等待页面加载。
发布于 2018-02-24 14:24:13
等待元素启用
等待元素启用:这是要检查元素是否在给定时间范围内启用的属性。
等待元素可见。
等待元素可见。:这是检查页面DOM中已知的元素是否在给定的时间范围内可见的期望。
等到Page包含元素
等到Page包含元素:这是检查某个元素是否存在于页面的DOM中的期望,而不是在给定的时间范围内。
现在,每个keyword都是根据需求(usecase)使用的,并且如Selenium2Library中所列出的那样有效、有效和可靠。
注意事项:自3.0版以来,Selenium2Library被重命名为SeleniumLibrary。目前,Selenium2Library只是SeleniumLibrary的一个薄薄的包装器,它简化了向新项目的转换。在这里,您可以找到https://github.com/robotframework/SeleniumLibrary和https://github.com/robotframework/Selenium2Library项目页面以获得更多文档。
最后,当您寻找一个检查是否加载了完整页面的keyword时,有一种检查complete是否等于complete的做法,但值得一提的是,只有在实现了'document.readyState'等于"complete"的情况下,Web客户端(即Web浏览器)才会将控件返回给WebDriver实例,尽管它并没有要求新https://www.w3schools.com/js/js_htmldom.asp上的所有WebElements都是visible、interactable和clickable
https://stackoverflow.com/questions/48948930
复制相似问题