【问题标题】:Not able to locate web element on chrome browser's settings popup无法在 chrome 浏览器的设置弹出窗口中找到 Web 元素
【发布时间】:2019-05-29 13:26:33
【问题描述】:

我正在尝试清除浏览器缓存,为此我需要单击浏览器设置弹出窗口的清除数据按钮,但是,我无法为 chrome 浏览器上的按钮编写 xpath

我已经尝试检查元素以找出按钮是否在 iframe 上但它不在 iframe 中,所以我决定尝试使用不带 iframe sn-p 的按钮,无论哪种方式元素都不会被追踪在dom中

    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();

    }

预计我应该能够点击清除数据按钮 实际是我无法找到元素的 xpath

【问题讨论】:

  • 您正在处理影子根元素。看到这个问题:stackoverflow.com/questions/37384458/….
  • 您确定要切换到正确的句柄吗?如果我是你,我会在“清除浏览数据”之前获取句柄,并确保你没有切换到错误的句柄。当你打印出窗把手时它会说什么?
  • @DynamicSwarmi 我尝试打印仅打印一个窗口 ID 的 getWindowHandles,而且在检查时 DOM 没有任何 iframe

标签: selenium selenium-webdriver


【解决方案1】:

根据您使用的 chrome 版本,这可能有效:

driver.findElement(By.cssSelector("* /deep/ #clearBrowsingDataConfirm")).click();

但是 /deep/ 组合器已被弃用,因此它可能不适用于较新的 Chrome 版本。

【讨论】:

  • 您是对的,我最新版本的 chrome [74] 不适用于此“* /deep/ #clearBrowsingDataConfirm”
【解决方案2】:

我在 other question 中回答了如何进入 Shadow DOM。

您可以在链接中阅读整个内容,但基本内容是您通过 JavaScript 在 Shadow DOM 上创建一个“起点”WebElement,然后所有未来的查找都会引用它:

WebElement button = startingPoint.findElement(By.cssSelector("..."));

【讨论】:

    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    相关资源
    最近更新 更多