一尘不染

Selenium Webdriver无法单击页面外的链接

selenium

Selenium WebDriver出现问题。我尝试单击窗口页面外部的链接(您需要向上滚动才能看到它)。我当前的代码是相当标准的:

menuItem = driver.findElement(By.id("MTP"));
menuItem.click();
// I also tried menuItem.sendKeys(Keys.RETURN);

我知道我可以向上滚动,并且在这种情况下可以使用。但是,如果您有很长的项目列表,则不必知道向下滚动的距离。

有什么方法可以单击页面可见部分之外的链接(但是如果滚动,该链接将可见)?

附带说明,我使用的是Firefox,但我计划也使用IE7 / 8/9和Chrome。

任何帮助将不胜感激。

编辑:恐怕我不能提供源代码,因为我工作的公司不允许这样做,但是我可以提供要单击的链接的代码:

<div class="submenu">
  <div id="MTP">Link title</div>
</div>

当链接可见时,完全相同的代码才起作用,只有当链接不可见时,它才起作用。

Edit2:实际上,很奇怪,它没有引发任何异常,只是转到下一条指令。所以基本上,发生的是:

menuItem = driver.findElement(By.id("MTP")); // no exception
menuItem.click();  // no exception
//... some code ensuring we got to the next page: timeout reached
driver.findElement(By.id("smLH")).click(); // NoSuchElementException, as we're on the wrong page.

阅读 307

收藏
2020-06-26

共1个答案

一尘不染

实际上可以自动滚动到元素。尽管在这种情况下这不是一个好的解决方案(必须有一种无需滚动即可使其工作的方法),但我将其发布为一种解决方法。我希望有人能提出更好的主意…

public void scrollAndClick(By by)
{
   WebElement element = driver.findElement(by);
   int elementPosition = element.getLocation().getY();
   String js = String.format("window.scroll(0, %s)", elementPosition);
   ((JavascriptExecutor)driver).executeScript(js);
   element.click();
}
2020-06-26