无法在div类中找到元素

时间:2016-09-13 10:25:48

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

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

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

元素的名称是Book Editor。这是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>

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

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

这似乎是最有可能的,我相信盖伊在他的回答中暗指的是什么。

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

  

来自Guy的回复:

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