![](/img/trans.png)
[英]org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element…is not clickable at point
[英]org.openqa.selenium.ElementClickInterceptedException: element click intercepted error using Selenium and Java in headless mode
我有一個項目,我正在使用 java 和 selenium。在 UI 模式下測試工作正常。 但是在無頭模式下我得到這個錯誤
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>
我該如何解決這個問題(在 UI 模式下工作)。 這是我的代碼
WebDriver driver = getWebDriver();
WebElement element;
Thread.sleep(60000);
element = driver.findElement(By.xpath("//label[@formcontrolname='reportingDealPermission']"));
element.click();
為什么在 selenium 中沒有移動到元素並打破所有層的操作。 這是用戶界面。 這是在 UI 模式下工作,在 headless 模式下不工作,休眠了 6 分鍾但沒有解決,所以這不是時間問題
此錯誤消息...
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>
...意味着對所需元素的單擊被其他元素攔截。
理想情況下,在您需要為elementToBeClickable()
誘導WebDriverWait的任何元素上調用click()
時,您可以使用以下任一Locator Strategies :
cssSelector
:
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();
如果它仍然不起作用並且仍然出現異常,則在更改為headless之后,仍然需要考慮以下幾個其他措施:
無頭模式下的 Chrome 瀏覽器無法以最大化模式打開。 因此,您必須使用以下任一命令/參數來最大化無頭瀏覽器Viewport :
添加參數start-maximized
ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); options.addArguments("start-maximized"); WebDriver driver = new ChromeDriver(options);
添加參數--window-size
ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); options.addArguments("--window-size=1400,600"); WebDriver driver = new ChromeDriver(options);
使用setSize()
ChromeOptions options = new ChromeOptions(); options.addArguments("--headless"); WebDriver driver = new ChromeDriver(options); driver.manage().window().setSize(new Dimension(1440, 900));
您可以在無頭模式下無法最大化 Chrome Window 中找到詳細討論
此外,您還可以在嘗試click()
之前使用ExpectedConditions invisibilityOfElementLocated
等待攔截元素不可見,如下所示:
cssSelector
:
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.invisibilityOfElementLocated(By.xpath("//div[@class='footer']"))); new WebDriverWait(getWebDriver(), 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission' and @ng-reflect-name='reportingDealPermission']"))).click();
您可以在以下位置找到一些相關的相關討論:
嘗試添加顯式等待
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission']"))).click();
如果這不起作用,請嘗試使用 JS Executor
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).
另一個元素收到點擊:
答案是使用 javascript 執行器顯式等待。 這種組合對我有用:
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission']")));
((JavascriptExecutor)driver).executeScript("arguments[0].click();", element);
以上答案都不適合我。 嘗試使用動作 class 如下:
WebElement element = driver.findElement(By.xpath("//div[@class='footer']"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().build().perform();
就我而言,“JavaScript”有效:
WebElement ele = driver.findElement(By.xpath("(//input[@name='btnK'])[2]"));
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("arguments[0].click()", ele);
WebDriverWait 等待 = new WebDriverWait(driver, 10 ); ---> 已棄用,它給出了一個錯誤。 請改用以下內容:
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@formcontrolname='reportingDealPermission']"))).click();
確保為WebDriverWait 和 ExpectedConditions導入相關項目。
就我而言,沒有任何效果。 只有THREAD.SLEEP()
方法有效!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.