单击Facebook帖子按钮时发生java.lang.IllegalMonitorStateException异常

单击Facebook帖子按钮时发生java.lang.IllegalMonitorStateException异常,java,selenium,selenium-webdriver,action,webdriverwait,Java,Selenium,Selenium Webdriver,Action,Webdriverwait,元素已启用并显示。但是,我在尝试单击按钮元素时出错 错误:java.lang.IllegalMonitorStateException 有关更多详细信息,请查看我的代码 Actions动作=新动作(驱动程序); actions.moveToElement(element,element.getLocation().x,element.getLocation().y)。等待(3000); 元素。单击(); 如果您已使用synchronized为对象获取锁,则只能等待该对象 synchronized

元素已启用并显示。但是,我在尝试单击按钮元素时出错

错误:java.lang.IllegalMonitorStateException

有关更多详细信息,请查看我的代码

Actions动作=新动作(驱动程序);
actions.moveToElement(element,element.getLocation().x,element.getLocation().y)。等待(3000);
元素。单击();

如果您已使用synchronized为对象获取锁,则只能等待该对象

synchronized (driver)
{
    driver.wait();
}
试试这个:

 synchronized(actions){
 actions.moveToElement(element, element.getLocation().x, element.getLocation().y).wait(3000);
 } 
非法监视器状态异常 根据Java,抛出Java文档是为了指示线程试图在对象的监视器上等待,或者通知其他线程在不拥有指定监视器的情况下在对象的监视器上等待

public class IllegalMonitorStateException
extends RuntimeException
从类继承的相关方法如下所示:

  • Object.notify()
    :唤醒等待此对象监视器的单个线程
  • Object.notifyAll()
    :唤醒等待此对象监视器的所有线程
  • Object.wait()
    :使当前线程等待,直到另一个线程调用此对象的
    notify()
    方法或
    notifyAll(
    )方法
  • Object.wait(long)
    :使当前线程等待,直到另一个线程调用此对象的
    notify()
    方法或
    notifyAll()
    方法,或者经过指定的时间
  • Object.wait(long,int)
    :使当前线程等待,直到另一个线程调用此对象的
    notify()
    方法或
    notifyAll()
    方法,或其他线程中断当前线程,或经过一定的实时时间

由于您正在使用这些
wait()
方法,因此此处无法使用,您需要与一起使用,并且可以使用以下解决方案:

WebElement element = driver.findElement(By.cssSelector("css_of_the_element"))
new Actions(driver).moveToElement(new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(element))).click().build().perform();
在这里,您可以找到关于


试试这个:synchronized(actions){actions.moveToElement(element,element.getLocation().x,element.getLocation().y)。wait(3000);}为什么要使用
wait()
?这不是一个问题……我已经添加了一个答案。希望对你有帮助