org.openqa.selenium.element ClickInterceptedException:element在无头模式下使用selenium和Java时单击拦截错误
我有一个使用java和selenium的项目。 测试在UI模式下正常工作。 然而,在无头模式下,我得到了这个错误org.openqa.selenium.element ClickInterceptedException:element在无头模式下使用selenium和Java时单击拦截错误,java,selenium,xpath,css-selectors,webdriverwait,Java,Selenium,Xpath,Css Selectors,Webdriverwait,我有一个使用java和selenium的项目。 测试在UI模式下正常工作。 然而,在无头模式下,我得到了这个错误 org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <label _ngcontent-yrc-c26="" formcontrolname="reportingDealPermission" nz-checkbox="" class="ant-chec
org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <label _ngcontent-yrc-c26="" formcontrolname="reportingDealPermission" nz-checkbox="" class="ant-checkbox-wrapper ng-untouched ng-pristine ng-valid" ng-reflect-name="reportingDealPermission">...</label> is not clickable at point (161, 562). Other element would receive the click: <div _ngcontent-yrc-c26="" class="footer">...</div>
为什么在selenium中没有移动到元素并打断所有层的操作。
这是用户界面。
这是在用户界面模式下工作,而不是在无头模式下工作,睡眠6分钟,未解决,所以这不是时间问题
尝试添加显式等待
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission']"))).click();
如果这不起作用,那么尝试使用JS执行器
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission']")));
((JavascriptExecutor)driver).executeScript("arguments[0].click();", element);
尝试添加显式等待
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission']"))).click();
如果这不起作用,那么尝试使用JS执行器
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission']")));
((JavascriptExecutor)driver).executeScript("arguments[0].click();", element);
此错误消息
org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <label _ngcontent-yrc-c26="" formcontrolname="reportingDealPermission" nz-checkbox="" class="ant-checkbox-wrapper ng-untouched ng-pristine ng-valid" ng-reflect-name="reportingDealPermission">...</label> is not clickable at point (161, 562). Other element would receive the click: <div _ngcontent-yrc-c26="" class="footer">...</div>
xpath
:
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission' and @ng-reflect-name='reportingDealPermission']"))).click();
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@class='footer']")));
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission' and @ng-reflect-name='reportingDealPermission']"))).click();
更新
在更改为无头之后,如果它仍然不起作用,仍然会出现异常,则仍有一些其他的措施要考虑如下:
- 不会在最大化模式下打开。因此,您必须使用以下任一命令/参数来最大化无头浏览器:
- 添加参数
start最大化
ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); options.addArguments("start-maximized"); WebDriver driver = new ChromeDriver(options);
- 添加参数<代码>--窗口大小
ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); options.addArguments("--window-size=1400,600"); WebDriver driver = new ChromeDriver(options);
ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); WebDriver driver = new ChromeDriver(options); driver.manage().window().setSize(new Dimension(1440, 900));
- 使用
setSize()
- 添加参数
- 此外,您还可以使用
等待intercept元素不可见,然后再尝试invisibilityOfElementLocated
,如下所示:click()
:css选择器
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("label[formcontrolname=reportingDealPermission][ng-reflect-name=reportingDealPermission]"))).click();
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("div.footer"))); new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("label[formcontrolname=reportingDealPermission][ng-reflect-name=reportingDealPermission]"))).click();
:xpath
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission' and @ng-reflect-name='reportingDealPermission']"))).click();
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@class='footer']"))); new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission' and @ng-reflect-name='reportingDealPermission']"))).click();
工具书类 您可以在以下内容中找到一些相关讨论:
org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <label _ngcontent-yrc-c26="" formcontrolname="reportingDealPermission" nz-checkbox="" class="ant-checkbox-wrapper ng-untouched ng-pristine ng-valid" ng-reflect-name="reportingDealPermission">...</label> is not clickable at point (161, 562). Other element would receive the click: <div _ngcontent-yrc-c26="" class="footer">...</div>
xpath
:
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission' and @ng-reflect-name='reportingDealPermission']"))).click();
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@class='footer']")));
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission' and @ng-reflect-name='reportingDealPermission']"))).click();
更新
在更改为无头之后,如果它仍然不起作用,仍然会出现异常,则仍有一些其他的措施要考虑如下:
- 不会在最大化模式下打开。因此,您必须使用以下任一命令/参数来最大化无头浏览器:
- 添加参数
start最大化
ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); options.addArguments("start-maximized"); WebDriver driver = new ChromeDriver(options);
- 添加参数<代码>--窗口大小
ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); options.addArguments("--window-size=1400,600"); WebDriver driver = new ChromeDriver(options);
ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); WebDriver driver = new ChromeDriver(options); driver.manage().window().setSize(new Dimension(1440, 900));
- 使用
setSize()
- 添加参数
- 此外,您还可以使用
等待intercept元素不可见,然后再尝试invisibilityOfElementLocated
,如下所示:click()
:css选择器
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("label[formcontrolname=reportingDealPermission][ng-reflect-name=reportingDealPermission]"))).click();
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("div.footer"))); new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("label[formcontrolname=reportingDealPermission][ng-reflect-name=reportingDealPermission]"))).click();
:xpath
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission' and @ng-reflect-name='reportingDealPermission']"))).click();
new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@class='footer']"))); new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission' and @ng-reflect-name='reportingDealPermission']"))).click();
工具书类 您可以在以下内容中找到一些相关讨论:
driver.manage().window().setSize(新维度(19201080))
只是另一种设置我知道并使用的浏览器客户端的方法,但是在更改为headless之后,它不起作用,在等待clickable之后,仍然会得到异常,只有java脚本worked@Bastian签出答案更新并让我知道状态。它解决了问题,我使用了options.addArguments(“开始最大化”);和options.addArguments(“--windowsize=19201080”);我没有使用driver.manage().window().setSize(新维度(19201080));第三个是干什么的?因为我不使用它-@DebanjanB@Bastiandriver.manage().window().setSize(新维度(19201080))代码>只是设置浏览器客户端的另一种方式