如何在Java Selenium WebDriver的主窗口中的特定菜单中滚动鼠标



我正试图在Selenium WebDriver的帮助下在Chrome中找到一个web元素。当驱动程序启动URL时,将显示一个项目列表,并且驱动程序必须从该列表中选择一个特定项目。

只要该项目在列表的顶部,就可以找到该项目,但是,如果该项目位于列表的最底部(按照列表的字母顺序排列,并尝试选择列表中的记录57),则测试一直失败,驱动程序找不到web元素!!!

我终于到了这个地步,我需要滚动我的列表,直到那个项目出现,但根据这个滚动条在菜单中,而不是在主窗口中,这个命令甚至没有执行!我是否需要将项目菜单识别为驱动程序?如何在窗口中向下滚动项目菜单?我不想滚动主Web窗口,我只需要在项目列表中滚动。

我尝试了所有可能的解决方案,并在Stack Overflow论坛和互联网上冲浪,但无法修复这个错误。如果你们能看看下面的代码并给我一些建议,那就太好了。如果我需要提供更多信息,请告诉我。值得一提的是,我正在阅读电子表格中的"projectName"。

// Initially I need to hover the mouse on Select Project menu.
Actions action = new Actions(driver);
WebElement list = driver.findElement(By.xpath("//*[@id="gridview-1032"]")); 
action.moveToElement(list);
JavascriptExecutor js = (JavascriptExecutor) driver;
// Now I need to scroll down till find my desire project in the list.
WebElement Project = driver.findElement(By.xpath("//*[text()= '"+ projectName +"']"));                 
js.executeScript("arguments[0].scrollIntoView(true);",Project);
Project.click();

实际结果:

线程"main"org.openqa.selenium.NoSuchElementException异常:没有这样的元素:找不到元素:{"方法":"xpath","选择器":"//*[text()='projectName]"}

预期结果:在列表中找到元素,然后单击该项以启动项目!

下面是适用于我的代码

Actions action = new Actions(driver);
WebElement list = driver.findElement(By.xpath("//*[@id="gridview-1032"]")); 
action.moveToElement(list);
JavascriptExecutor js = (JavascriptExecutor) driver;
// Now I need to scroll down till find my desire project in the list.
WebElement Project = driver.findElement(By.xpath("//*[text()= '"+ projectName +"']"));                 
js.executeScript("arguments[0].click();",Project);

我为这个问题找到了一个更简单的替代解决方案:

//创建Javascript执行程序的实例

JavascriptExecutor je = (JavascriptExecutor) driver;

//识别向下滚动后将出现的WebElement

WebElement Project = driver.findElement(By.className("x-grid-item-container"));

//现在执行查询,该查询实际上会滚动,直到该元素并没有出现在页面上。

je.executeScript("arguments[0].scrollIntoView(true);",Project);      

//登录到所需项目

Project.click();

我认为这可能是其他人的问题,我也在添加我的解决方案,它可能会有所帮助:

//它找到列表并滚动3000像素

EventFiringWebDriver eventFiringWebDriver = new EventFiringWebDriver(driver6);
eventFiringWebDriver.executeScript("document.querySelector('#gridview-1032').scrollTop=3000");

//找到项目并登录

WebElement Project = driver6.findElement(By.xpath("//*[text()= '"+ projectName +"']"));
Project.click();

最新更新