我正在尝试点击一个元素..它是位于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>
答案 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();