除了实现自己的多线程,Selenium是否有机制等待并行的多个元素过时?Selenium能够并行等待多个元素陈旧性(Java)吗?
我使用这个等待单个元件
WebDriverWait wait = new WebDriverWait(driver, 3); //3 = timeout
wait.until(ExpectedConditions.stalenessOf(element));
我有同时重新创建30个元素,我不将不阻塞30 * 3秒的代码。
感谢
除了实现自己的多线程,Selenium是否有机制等待并行的多个元素过时?Selenium能够并行等待多个元素陈旧性(Java)吗?
我使用这个等待单个元件
WebDriverWait wait = new WebDriverWait(driver, 3); //3 = timeout
wait.until(ExpectedConditions.stalenessOf(element));
我有同时重新创建30个元素,我不将不阻塞30 * 3秒的代码。
感谢
硒没有做到这一点。
我的建议是:挑选最长的元素并等待那个元素。
这一切都是并行发生的,所有元素需要等待的时间相同,这就是问题 – user3364652
@ user3364652如果这一切都平行发生,为什么不等待** one **元素,然后只验证所有其他元素也是陈旧? –
弗洛里安指着我认为的正确方向 –
wait.until
只有在条件满足之前才阻止代码。超时是最长的时间。
WebDriverWait wait = new WebDriverWait(driver, 3);
wait.until(ExpectedConditions.stalenessOf(element));
在你的代码,如果ExpectedConditions.stalenessOf
是真的在1秒钟后wait.until
将1第二块。如果ExpectedConditions.stalenessOf
在第一次检查中已经成立,则代码将立即继续。
使用NgWebDriver:https://github.com/paul-hammant/ngWebDriver。
您可以等到所有页面元素准备就绪后,必须使用Angular的网站库
您不必等待30 * 3秒。每个线程几乎立即开始正确?如果是这样,那么你的总等待时间将只有3秒。 – Raghuveer
是的,我问如何做,如果我不会自己实现多线程。 – user3364652
您可以将第三个参数添加到webdriverwait构造函数中,该参数将轮询条件之间的默认休眠时间更改为0.5秒。将其缩小到100毫秒(构造函数需要的毫秒数)。在编写并行解决方案之前,测量单线程正在进行的时间。如果你想要一个并发的方法,我建议你使用java.util.concurrent包的Future和Callable类。更容易用这个返回主程序的值。 – Grasshopper