您的位置:首页 > 其它

selenium下拉等待页面完全加载

2018-01-12 11:24 344 查看
在使用selenium的过程中,我们会遇到打开一个页面后,等待进度条加载完成,再去滚动鼠标或者下拉页面的时候,页面还会继续加载内容,这就会导致在定位元素并且滑动的时候,代码报错:元素不存在。

这是因为页面需要手动下拉或者向下滑动,才能加载全部(剩下的)的内容。可以通过sendKeys(Keys.DOWN)方法多下拉几次,来实现页面全部内容的加载。

下面示例是以百度新闻为例:

package com.keydom;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class selenium2 {

public static WebDriver driver;
public static void main(String[] args) throws Exception {

System.setProperty("webdriver.chrome.driver", "E:\\eclipse_jar\\selenium_jar\\chromedriver.exe");
driver = new ChromeDriver();

driver.get("http://www.baidu.com/");
Thread.sleep(1000);

driver.findElement(By.xpath("//*[@id=\"u1\"]/a[1]")).click();
Thread.sleep(2000);

/**
* 用sendKeys(Keys.DOWN)方法下拉加载页面
* 可能会需要多次下拉才能加载全部内容
* 以百度新闻为例
*/
driver.findElement(By.xpath("//*[@id=\"channel-all\"]/div/ul/li[1]/a")).sendKeys(Keys.DOWN);
Thread.sleep(1000);
driver.findElement(By.xpath("//*[@id=\"channel-all\"]/div/ul/li[1]/a")).sendKeys(Keys.DOWN);
Thread.sleep(1000);
driver.findElement(By.xpath("//*[@id=\"channel-all\"]/div/ul/li[1]/a")).sendKeys(Keys.DOWN);
Thread.sleep(1000);
driver.findElement(By.xpath("//*[@id=\"channel-all\"]/div/ul/li[1]/a")).sendKeys(Keys.DOWN);
Thread.sleep(1000);

((JavascriptExecutor)driver).executeScript("window.scrollTo(0, document.body.scrollHeight)");
Thread.sleep(2000);
((JavascriptExecutor)driver).executeScript("scrollTo(0, 0)");
Thread.sleep(2000);
((JavascriptExecutor)driver).executeScript("window.scrollTo(0, document.body.scrollHeight)");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  selenium