如何用Java中断Selenium线程

如何用Java中断Selenium线程,java,multithreading,selenium,Java,Multithreading,Selenium,我正在尝试为selenium测试设置页面刷新超时。 我想做的是: 如果selenium无法在数秒内完成页面上的findElement,findElement操作将停止,页面将刷新 因此,我尝试在Java中使用多线程来执行以下操作: 一个线程用于计算超时时间 和其他线程(主线程)将用于执行该操作 问题是:我不能中断findElement操作线程。 以下是我在尝试执行测试时看到的线程列表: 线程:附加侦听器 线程:完成 线程:信号调度器 线程:刷新超时线程 螺纹:螺纹-6 线程:将会话f7fe

我正在尝试为selenium测试设置页面刷新超时。 我想做的是:

如果selenium无法在数秒内完成页面上的findElement,findElement操作将停止,页面将刷新

因此,我尝试在Java中使用多线程来执行以下操作:

  • 一个线程用于计算超时时间
  • 和其他线程(主线程)将用于执行该操作
问题是:我不能中断findElement操作线程。 以下是我在尝试执行测试时看到的线程列表:

  • 线程:附加侦听器
  • 线程:完成
  • 线程:信号调度器
  • 线程:刷新超时线程
  • 螺纹:螺纹-6
  • 线程:将会话f7fea321-0acd-4df3-904d-52e32decb965上的FindElement转发到远程
  • 螺纹:螺纹-7
  • 螺纹:螺纹-5
线程:main实际上更改为线程:将会话f7fea321-0acd-4df3-904d-52e32decb965上的findElements转发到远程。为了澄清这个问题,我将这个线程称为“findElement线程”

当我试图中断“findElement线程”时,findElement操作仍在运行,没有任何中断。我尝试中断另一个线程(线程:thread-5),但它将删除与当前web驱动程序的连接,测试将失败。我不知道我是否做错了什么是正确的线程被中断

谢谢你阅读这篇文章。
如果您有任何建议,我们将不胜感激。

实现您的目标的另一种方法是,只需使用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