2016-08-20 193 views
1

我使用Java在Selenium上创建了一些测试用例。不幸的是,当我点击页面上的一个元素之前,我可以转到任何其他操作,我必须等到页面加载。当预期的元素存在时,Selenium立即停止页面加载

我试过driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);。不幸的是,这会产生另一个问题即使页面加载,它也会等待30秒才会开始在页面上进行测试。

我发现最好的方法是发送ESCAPE键来停止页面加载。

是否有无论如何我可以检查一个元素是否存在,当它发生时,发送ESCAPE键到浏览器停止页面加载?

这部分是我的头脑,因为我必须等到页面加载之前Java读取代码的下一行,所以我不能发送ESCAPE键到浏览器,直到页面实际上停止加载。

编辑

我一直在使用一个新的线程来完成这项工作只是尝试,但它似乎driver被完全锁定了,不能做任何处理页面停止加载之前。

我现在没有想法,但我相信应该有办法。

使用timeouts()导致整个测试案例停止。

回答

2

首先我想说这不是最佳做法。 selenium click方法指出,如果点击触发页面加载,selenium将尽最大努力阻止页面加载。您可以尝试通过JavaScript发送点击事件,而不是通过点击方法进行点击。然后等待正常的元素。

+0

我通常对新功能/网站进行这些测试。其中一些是全新的。有时候,我测试了100次以上的同一页面(使用不同的条件)。不会通过JavaScript发送点击事件会增加跳出率?如果是这样的话,我不认为每个人都会喜欢这个。 – Revenant

+0

您正在生产中运行测试?那么是的,你必须与任何监测噪音的人分析。也可能希望了解有关使测试服务器运行测试以避免一般性破坏分析的问题 –

+0

这经常是我的担忧。当我在测试/分级环境中进行测试时,我不介意这些问题。当它在生产环境中时,我只想尽快完成它。 – Revenant

1

您可以尝试driver.manage()。timeouts()。pageLoadTimeout(10,TimeUnit.SECONDS);它应该在超时结束后引发错误。我从来没有使用它,但也许你可以尝试并捕获这个错误,并继续你的测试。但是,您的页面最终会处于不稳定的状态,并且所有内容都不会加载并且测试与元素进行交互。

+0

是的,它会抛出一个错误,然后它不能按预期完全发挥作用。更不用说,如果在10秒之内,元素不存在,这会产生另一个级别的问题。 这就是为什么我要等到元素存在的原因,一旦发生,通过发送'ESCAPE'键停止页面加载。 这就是为什么我不能使用'pageLoadTimeout'我也试过了。 – Revenant

+0

什么是需要时间来加载?图片?具体看看这个问题@kyrenia的答案。这是为Firefox虽然,http://stackoverflow.com/questions/7157994/do-not-want-images-to-load-and-css-to-render-on-firefox-in-selenium-webdriver-te – Grasshopper

+0

感谢您的链接,对于某些情况确实有用。它依赖于页面,有时是CSS,图像,js ...外部资源......真的有机会不提及我可能至少在大多数情况下需要这些资源。 – Revenant

相关问题