如何用Java中断Selenium线程
我正在尝试为selenium测试设置页面刷新超时。 我想做的是: 如果selenium无法在数秒内完成页面上的findElement,findElement操作将停止,页面将刷新 因此,我尝试在Java中使用多线程来执行以下操作:如何用Java中断Selenium线程,java,multithreading,selenium,Java,Multithreading,Selenium,我正在尝试为selenium测试设置页面刷新超时。 我想做的是: 如果selenium无法在数秒内完成页面上的findElement,findElement操作将停止,页面将刷新 因此,我尝试在Java中使用多线程来执行以下操作: 一个线程用于计算超时时间 和其他线程(主线程)将用于执行该操作 问题是:我不能中断findElement操作线程。 以下是我在尝试执行测试时看到的线程列表: 线程:附加侦听器 线程:完成 线程:信号调度器 线程:刷新超时线程 螺纹:螺纹-6 线程:将会话f7fe
- 一个线程用于计算超时时间
- 和其他线程(主线程)将用于执行该操作
- 线程:附加侦听器
- 线程:完成
- 线程:信号调度器
- 线程:刷新超时线程
- 螺纹:螺纹-6
- 线程:将会话f7fea321-0acd-4df3-904d-52e32decb965上的FindElement转发到远程
- 螺纹:螺纹-7
- 螺纹:螺纹-5
如果您有任何建议,我们将不胜感激。实现您的目标的另一种方法是,只需使用Selenium的FluentWait API,并在每次轮询查找请求的元素时启动页面刷新:
Wait<WebDriver> wait = new FluentWait<>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
driver.navigate().refresh();
return driver.findElement(...));
}
});
Wait Wait=new FluentWait(驱动程序)
.带超时(30,时间单位。秒)
.轮询间隔(5,时间单位。秒)
.忽略(NoSuchElementException.class);
WebElement foo=wait.until(新函数(){
@凌驾
公共WebElement应用(WebDriver){
driver.navigate().refresh();
返回驱动程序findElement(…);
}
});
如果您在页面上动态加载了元素,您可能还应该等待页面加载,然后再调用driver.findElement(…)在调查之后,我发现这是不可能的: 当我们使用java调用web驱动程序来执行selenium操作时,该操作将转移到web驱动程序来执行,此时我们将无法再操作该操作,更不用说它用于执行该操作的线程了,因为从这一点来看,web驱动程序控制的是执行,而不是java