selenium 自动化web测试

1.简介

用java抓取网页内容有很多种方法。

a)使用HttpClient发送请求,然后解析网页或json。

b)使用jsoup,来帮我们发请求,方便地像jquery那样抠取标签

c)使用selenium,通过浏览器加载页面。

1.1 selenium的优势

有些内容是通过ajax获取并通过js填充到dom中的,所以离开浏览器拿不到内容。

有些网站为防爬虫,用js做了特殊的运算与校验,然后服务端才会给正确的数据,所以离开浏览器拿不到正确的内容。

1.2 selenium的劣势

启动浏览器会消耗较大的系统资源,效率不会太高。

2.使用方法

以windows7+chrome+java 平台作说明。
首先安装chrome浏览器。
然后下载chromeDriver—— https://sites.google.com/a/chromium.org/chromedriver/
然后写java。
依赖见下:

	org.seleniumhq.selenium
	selenium-java
	2.42.2


	org.seleniumhq.selenium
	selenium-chrome-driver
	2.42.2

3.常用类与方法

org.openqa.selenium.chrome. ChromeDriver
此类负责启动chrome浏览器.
void org.openqa.selenium.WebDriver. get(String url)
打开一个网站.
WebElement org.openqa.selenium.WebDriver. findElement(By by)
查找element.
List org.openqa.selenium.WebDriver. findElements(By by)
查找符合条件的多个element.

org.openqa.selenium. By
抽象类,它的一些静态方法用于定位element.
By org.openqa.selenium.By. name(String name)
根据标签的name属性寻找.
By org.openqa.selenium.By. tagName(String name)
根据标签名寻找.
By org.openqa.selenium.By. id(String id)
根据标签的id属性寻找.
By org.openqa.selenium.By. className(String className)
根据标签的class属性寻找.


org.openqa.selenium. WebElement
接口。对应于dom中的标签.
String org.openqa.selenium.WebElement. getText()
获取标签及子标签的文本内容.
String org.openqa.selenium.WebElement. click()
触发指定元素的单击事件。

4.示例代码及工程

代码:
package seleniumDemo;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 * 百度新闻
 * 
 * @author yichu.dyc
 *
 */
public class BaiduNewsTest {
	public static void main(String[] args) throws InterruptedException {
		System.setProperty("webdriver.chrome.driver", "D:/code-tool/chromedriver_win32/chromedriver.exe");
		WebDriver webDriver = new ChromeDriver();
		webDriver.get("http://www.baidu.com");
		// 新闻
		webDriver.findElement(By.name("tj_trnews")).click();
		System.out.println("百度新闻页面的title为:\t" + webDriver.getTitle());
		System.out.println("重点推荐文章为:\t"+getEssays(webDriver));
		TimeUnit.SECONDS.sleep(10);
		webDriver.quit();

	}
	public static List getEssays(WebDriver webDriver){
		 List essays=new ArrayList<>();
		 List webelements=webDriver.findElements(By.tagName("strong"));
		 for (WebElement webElement : webelements) {
			 essays.add(webElement.getText());
		}
		return essays;
	}
}
selenium 自动化web测试_第1张图片
图4-1 根据name属性让selenium定位标签



你可能感兴趣的:(Java-EE,网站前端)