我有一个用例,其中网页上有一个div元素,一旦你点击一个链接就会出现一个弹出对话框(它不是一个真正的弹出窗口,就像点击一个对话框一样在Facebook上打开链接以查看您帖子上的反应等。)
我正在使用Selenium WebDriver和Java来自动化这个应用程序的测试,我的用例涉及我滚动到对话框的底部,其中有一个链接显示更多项目,当用户点击显示更多时,它填充列表中的其他10个项目,依此类推,直到没有其他项目供用户访问。
所以基本上我必须向下滚动那个特定的div元素,直到我看到Show More
链接,当驱动程序无法找到显示更多链接时,它应该停止。
注意 - 我不能只使用javascript window.scrollTo()
滚动到页面底部,因为它会向下滚动整个网页,但我只想滚动到该分割元素的底部。
如果有人知道如何实现这一点,请告诉我。
提前感谢您的帮助!
答案 0 :(得分:0)
WebElement ele= driver.findElement(By.id("id_of_element"));
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", ele);
或
WebElement ele= driver.findElement(By.id("id_of_element"));
Actions builder = new Actions(driver);
builder.moveToElement(ele).click();
Action build=builder.build();
build.perform();
答案 1 :(得分:0)
我遇到过这种问题,我使用SQA SO上提出的类似问题解决了这个问题。这是post。
请参阅Sagar007的last answer,它使用单独的函数scroll_Page()
来实现此目的。
直接从他的回答中获取的代码
某些HTML页面具有内部(自定义)滚动条。我们必须以一点点不同的方式处理。 Javascript在这里不起作用。
解决方案:
WebElement scrollArea =
driver.findElement(By.cssSelector("div.slimScrollBar"));
我添加了一个新步骤,我使用click()
方法点击div元素,然后继续下一步。
创建方法scroll_Page,如下所示。将此方法称为
scroll_Page(scrollArea ,100);
其中scrollArea是您的拖动(滚动)元素,100是滚动点。
public static boolean scroll_Page(WebElement webelement, int scrollPoints)
{
try
{
Actions dragger = new Actions(driver);
// drag downwards
int numberOfPixelsToDragTheScrollbarDown = 10;
for (int i = 10; i < scrollPoints; i = i + numberOfPixelsToDragTheScrollbarDown)
{
dragger.moveToElement(webelement).clickAndHold().moveByOffset(0, numberOfPixelsToDragTheScrollbarDown).release(webelement).build().perform();
}
Thread.sleep(500);
return true;
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
答案 2 :(得分:0)
使用scrollIntoView
scrollIntoView vs moveToElement scrollIntoView vs moveToElement
将more items
link元素作为参数传递。
((JavascriptExecutor)驱动程序).executeScript(&#34; arguments [0] .scrollIntoView(true);&#34;,element);
您也可以使用moveToElement
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();
答案 3 :(得分:0)
另一种滚动到任何可滚动元素内部(底部)的方式:
public void scrollToBottomInsideDiv(WebElement scrollArea) {
JavascriptExecutor js = ((JavascriptExecutor) webdriver);
js.executeScript("arguments[0].scrollTo(0, arguments[0].scrollHeight)", scrollArea);
}
答案 4 :(得分:0)
我在需要滚动的页面上有一个 div。此外,数据是动态加载的。该函数应该从 while(someCondition())
循环调用。使用Java
private int scroll;
private void scrollDownPopup() {
scroll += 1000;
JavascriptExecutor jse = (JavascriptExecutor) browser;
// you can get query selector from inspector
jse.executeScript("document.querySelector('body > div.Blah.Blah1 > div > div.ClassOfYourDiv').scrollTo(0, "
+ scroll + ");");
}