我不是质量检查人员,只是前端开发人员。我正在使用Firefox浏览器的Selenium IDE插件进行一些简单的测试。

我正在测试的网站使用ajax通过无限滚动引入新内容。因此,每次用户滚动到页面底部时,都会加载新内容。如何使Selenium IDE滚动到页面底部?该命令将是什么样子?

我试过了:键盘。当人们在此站点上按下该按钮时,会将用户带到页面底部并触发无限滚动。但是当硒测试通过时,测试通过了,但屏幕上没有显示该键被按下。页面不会移至底部,也不会触发Ajax。

有什么想法可以实现此目的吗?

#1 楼

Selenium会在您尝试与之交互的任何元素上自动调用javascript scrollIntoView函数。如果您知道页面底部存在某个元素,则对该元素执行任何操作(包括获取属性或将其悬停在其上等)都会导致页面滚动。

或者,您可能在尝试使用End或Page Down键向下滚动时处于正确的轨道,但是我对Selenium2 / Webdriver最熟悉,因此我不能说出上述方法的正确性。

评论


谢谢@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



#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)");
        }

    }