我正在使用Selenium,我需要开始测试我的页面,不仅在页面渲染时,而且在完成所有javascript初始化时。我希望在我的测试中避免Race条件,因为有些元素尚未正确初始化。
简单的问题有什么方法可以在所有javascript渲染完成后询问DOM? 由于onDocumentReady,我们知道渲染完成的时间。但是,我们可以开始初始化一些javascripts,并做一些业务逻辑。
我想知道是否有任何机制可以知道所有javascript执行何时完成。 我读取了使用promise对象进行异步初始化,但我正在寻找一种更通用的方法来了解它。
答案 0 :(得分:2)
没有通用的方法可以知道JavaScript代码已完成初始化。单个页面可以加载许多JavaScript库,这些库都可以完成自己的工作。即使您可以检测到初始Ajax操作已经完成,通常也无法知道此初始操作不会跟随其他同样是初始化操作的操作。
您需要做的是找到一种方法来确定就您的测试而言,页面已初始化足以让测试开始。 如何执行此操作取决于您网页上运行的JavaScript代码。以下是一个示例。对于我的一些应用程序,我使用DataTables来管理我的一些表。表中显示的数据通过Ajax调用加载。对于某些测试,我知道一旦加载了数据,该表将有X行数,所以我等待这些行显示在表中,然后继续测试。这适用于一些测试。对于执行更复杂测试的其他测试,我必须注册一个事件处理程序并在测试可以继续之前侦听表重绘事件。如果我测试的唯一的东西就是表格,那么等到页面上的其他东西已经完成初始化是浪费的。