我正在测试的网站使用ajax通过无限滚动引入新内容。因此,每次用户滚动到页面底部时,都会加载新内容。如何使Selenium IDE滚动到页面底部?该命令将是什么样子?
我试过了:键盘。当人们在此站点上按下该按钮时,会将用户带到页面底部并触发无限滚动。但是当硒测试通过时,测试通过了,但屏幕上没有显示该键被按下。页面不会移至底部,也不会触发Ajax。
有什么想法可以实现此目的吗?
#1 楼
Selenium会在您尝试与之交互的任何元素上自动调用javascript scrollIntoView函数。如果您知道页面底部存在某个元素,则对该元素执行任何操作(包括获取属性或将其悬停在其上等)都会导致页面滚动。或者,您可能在尝试使用End或Page Down键向下滚动时处于正确的轨道,但是我对Selenium2 / Webdriver最熟悉,因此我不能说出上述方法的正确性。
#2 楼
# function to handle dynamic page content loading - using Selenium
def fb_scroll():
# define initial page height for 'while' loop
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
else:
last_height = new_height
这就是使用python和硒Web驱动程序所需要的。希望这会有所帮助。
评论
对于我的设置来说效果很好。我所做的唯一修改是考虑到滚动区域不是整个网页,而是页面中的单个div这一事实。所以我使用了:driver.execute_script(“ return arguments [0] .scrollHeight”,scrollable_element)和driver.execute_script(“ arguments [0] .scrollTo(0,arguments [0] .scrollHeight)”,scrollable_element)
–加百利·戴维勒(Gabriel Devillers)
19年7月29日在13:07
#3 楼
如果有人觉得这很有用,这就是我在Selenium IDE中使用的功能:<tr>
<td>storeEval</td>
<td>window.scrollBy(0,500)</td>
<td></td>
</tr>
您可以更改垂直值,即500,以进一步向下移动页面。相信水平值(即0)也可能有用。.
评论
通过添加命令:“运行脚本”,目标:“ window.scrollBy(0,500)”,在SeleniumIDE中也可以使用
– Dror
19年7月23日在16:24
#4 楼
较晚的解决方案,但仅供参考:我的项目也使用Ajax来带来新内容(向下滚动)。在发布20条帖子后,您可以单击横幅。
我使用下面的代码向下滚动了20条帖子,然后单击横幅:
Command: sendKeys
Target: "<The Xpath of the 20th post (the post just before the banner)>"
然后我使用命令
clickAndWait
来单击横幅。评论
完美地工作,最后是一个很好的解决方案,至少对我来说是向上滚动,请参阅上面的评论。辛苦了:-)在我的情况下,我使用sendKeys并在目标中放入xpath = html / body / div [1] / section / div [2] / section [1],它向上滚动。 BAM !!!! 97X,摇滚的未来!
–布赖恩·托马斯(Brian Thomas)
16年6月29日在18:49
#5 楼
我不确定您是否可以在IDE中执行此操作。但是,如果您想在WebDriver中这样做,我确实有解决方案。有两种方法可以执行此操作,您可能会喜欢一种可以执行一些javascript的方法。第一种选择是使用Keys类来模拟WebDriver中的任何keypress事件。关于另一个,您可以通过将WebDriver实例转换为JavascriptExecutor来执行javascript(scrollTo)。 import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class ScrollPage {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.get("http://www.nytimes.com/");
((JavascriptExecutor)driver).executeScript("scrollTo(0,3000)");
// driver.findElement(By.id("shell")).sendKeys(Keys.END);
Thread.sleep(5000L);
((JavascriptExecutor)driver).executeScript("scrollTo(0,3000)");
}
}
评论
谢谢@SamWoods。 focus(locator)将使用位于页面底部的定位器来解决问题。
– AlessMascherpa
2013年12月4日上午11:49
焦点没有为我做任何技巧,没有滚动它,并且按键由于某种原因变得困扰我,现在弄清楚一个js函数可能太及时了,不想让它the肿测试,所以我认为即时通讯不在选项之列到目前为止,直到出现一些容易且合乎逻辑的方法为止。我只需要向后滚动到一个元素,以便在测试存储var时,眼睛可以在视觉上同时看到数据。
–布赖恩·托马斯(Brian Thomas)
16-6-29在18:45
您应该尝试使用操作生成器将鼠标悬停在元素上。 Java的基本示例是:hover = Action.new(driver); hover.moveToElement(toElement);悬停执行
–山姆·伍兹(Sam Woods)
16年6月29日在18:59