【问题标题】:Unable to find an element in div class在 div 类中找不到元素
【发布时间】:2016-09-13 10:25:48
【问题描述】:

我正在尝试单击一个元素..它是位于 div 中的跨度。我可以得到定位器。但是当我在代码中使用它时,它说元素不可点击。

WebElement BookEditor=driver.findElement(By.xpath("//*[@id='appNavPanel']/div/span[2]"));
WebElement BookEditor=driver.findElement(By.cssSelector("div.tooltip.fade.right"));

元素的名称是书籍编辑器。这是html。

<div class="cb-AppNav js-app-nav">
  <span data-toggle="tooltip" data-placement="right" class="cb-IconButton is-active" title="" data-original-title="Book Admin"></span>
  <span data-toggle="tooltip" data-placement="right" class="cb-IconButton cb-AppNav-button icon-utility-page js-app-nav-page-config" title="" data-original-title="Book Editor"></span>
  <span data-toggle="tooltip" data-placement="right" class="cb-IconButton cb-AppNav-button icon-utility-standard_objects js-app-nav-page-manager" title="" data-original-title="Book Manager"></span>
</div>

当我将光标移动到图标上时,它会显示以下代码。否则它是隐藏的。

<span data-toggle="tooltip" data-placement="right" class="cb-IconButton cb-AppNav-button icon-utility-page js-app-nav-page-config" title="" data-original-title="Book Editor"></span>
<div class="tooltip fade right" style="display: block; top: 57px; left: 50px;">
<div class="tooltip-arrow"></div>
<div class="tooltip-inner">Book Editor</div>
</div>

【问题讨论】:

  • 实际上你是使用 CSS 类定位的,我认为定位类是动态附加的,这就是为什么你在鼠标悬停后无法定位的原因,你应该尝试在鼠标悬停在元素上后使用 xpath 来定位元素driver.findElement(By.xpath(".//div[contains(.,'Book Editor')]")).click(); 告诉我

标签: java selenium xpath selenium-webdriver css-selectors


【解决方案1】:

在点击之前尝试移动到元素使其可见

Actions action = new Actions(webdriver);
WebElement bookEditor = driver.findElement(By.cssSelector("[data-original-title='Book Editor']"));
action.moveToElement(bookEditor).perform();
driver.findElement(By.cssSelector("div.tooltip.fade.right")).click();

【讨论】:

  • 感谢您对此进行调查。移动元素工作正常。但我得到了这个错误。 org.openqa.selenium.NoSuchElementException:没有这样的元素:无法找到元素:{“method”:“css selector”,“selector”:“div.tooltip.fade.right”}(会话信息:chrome = 52.0.2743.116 )
  • @Ela 你是想点击打开的工具提示还是点击原始元素上的或?
  • 我正在尝试单击原始元素。工具提示 sn-p 可能会混淆。我的错 :( 我尝试使用 xpath 和 css 查找以及动作 moveToElement。它没有用。
  • @Ela 试试driver.findElement(By.cssSelector("[data-original-title='Book Editor']")).click();
  • 感谢您的帮助。我现在收到现有错误:(未知错误:元素在点 (25, 123) 处不可点击。其他元素将收到点击:
【解决方案2】:

基于 html,我假设不可点击元素是某种“飞出”?

这似乎是最有可能的,我相信这就是盖伊在他的回应中所暗示的。

我建议,除了 Actions 实现之外,您还可以应用 WebDriverWait 以使元素在继续之前可点击。

来自盖伊的回复:

Actions action = new Actions(webdriver);
WebElement bookEditor = driver.findElement(By.cssSelector("[data-original-title='Book Editor']"));
action.moveToElement(bookEditor).perform();

添加一个 WebDriverWait 来解析正在显示的元素:

WebDriverWait wait = new WebDriverWait(webDriver, 10); //Up to 10 seconds for the state to match the desired conditions.
wait.until(ExpectedConditions.elementToBeClickble(By.cssSelector("div.tooltip.fade.right")).click();

【讨论】:

  • 是的,这似乎是不可点击的元素。即使添加了 WebDriverWait,我也会遇到同样的错误。 div.tooltip.fade.right 实际上是不可见的。只有当我在上面移动光标时才能看到。谢谢。没有这样的元素:无法找到元素:{"method":"css selector","selector":"div.tooltip.fade.right"
  • 使用 Actions 类应该会导致弹出窗口打开,并使其可见/可点击(至少这是意图)。 Actions.perform 不会导致这种情况发生吗?
  • 如果浮出控件正在打开并且您看到“无法定位元素”,那么我的下一个检查将是验证您查找要单击的元素。你确定你的 css 查找是正确的吗?
  • Actions 类没有做任何改变。既不将元素移动到位置也不抛出错误。奇怪的。 Css 查找似乎是正确的。我实际上是从萤火虫那里得到的。
  • 定位器正确。 DOM 似乎有问题。既不是隐式等待也不是显式等待工作......用thread.sleep()试过。有用!我不确定问题是什么?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多