Selenium 无法在chrome浏览器上找到web元素';s设置弹出窗口
我正在尝试清除浏览器缓存,为此我需要单击浏览器设置弹出窗口中的“清除数据”按钮,但是,我无法在chrome浏览器上为该按钮编写xpath 我曾尝试检查元素,以确定按钮是否位于iframe上,但不在iframe中,因此我决定使用一个不带iframe的片段来尝试它,无论哪种方式,元素都不会在dom中被跟踪Selenium 无法在chrome浏览器上找到web元素';s设置弹出窗口,selenium,selenium-webdriver,Selenium,Selenium Webdriver,我正在尝试清除浏览器缓存,为此我需要单击浏览器设置弹出窗口中的“清除数据”按钮,但是,我无法在chrome浏览器上为该按钮编写xpath 我曾尝试检查元素,以确定按钮是否位于iframe上,但不在iframe中,因此我决定使用一个不带iframe的片段来尝试它,无论哪种方式,元素都不会在dom中被跟踪 public void clearBrowserCache() throws InterruptedException{ driver.get("chrome://settings
public void clearBrowserCache() throws InterruptedException{
driver.get("chrome://settings/clearBrowserData");
Thread.sleep(2000);
System.out.println(driver.getWindowHandles());
String windowIds=driver.getWindowHandle();
// driver.switchTo().frame(windowIds);
driver.findElement(By.cssSelector(
[id=clearBrowsingDataConfirm]")).click();
}
期望的是,我应该能够点击清除数据按钮
实际情况是,我无法找到EmElement的xpath,具体取决于您使用的chrome版本,这可能会起作用:
driver.findElement(By.cssSelector("* /deep/ #clearBrowsingDataConfirm")).click();
但是,
/deep/
combinator已被弃用,因此它可能无法在较新的Chrome版本上工作。根据您使用的Chrome版本,这可能会起作用:
driver.findElement(By.cssSelector("* /deep/ #clearBrowsingDataConfirm")).click();
但是,
/deep/
combinator已被弃用,因此它可能无法在较新的Chrome版本上工作。我回答了如何以一种新的方式进入阴影DOM
您可以在链接中阅读整个内容,但基本的是您通过JavaScript在Shadow DOM中创建一个“起点”WebElement,然后所有将来的查找都会引用它:
WebElement button = startingPoint.findElement(By.cssSelector("..."));
我回答了如何在黑暗中到达DOM内部 您可以在链接中阅读整个内容,但基本的是您通过JavaScript在Shadow DOM中创建一个“起点”WebElement,然后所有将来的查找都会引用它:
WebElement button = startingPoint.findElement(By.cssSelector("..."));
您正在处理阴影根元素。请参阅此问题:。是否确实要切换到正确的句柄?如果我是你,我会在“清除浏览数据”之前获得句柄,并确保你没有切换到错误的句柄。当你打印出窗口句柄时,它说了什么?@DynamicSwarmi我试过打印getWindowHandles,它只打印一个窗口ID,当DOM没有任何Iframes时,你处理的是阴影根元素。请参阅此问题:。是否确实要切换到正确的句柄?如果我是你,我会在“清除浏览数据”之前获得句柄,并确保你没有切换到错误的句柄。当你打印出窗口句柄时,它说了什么?@DynamicSwarmi我试过打印getWindowHandles,它只打印一个窗口ID,更多的是当DOM没有任何Iframesh时。你是对的,我最新版本的chrome[74]不能使用这个“*/deep/#clearBrowsingDataConfirm”您好,你是对的,我最新版本的chrome[74]无法使用此“*/deep/#clearBrowsingDataConfirm”