はじめに
Mockitoをやってみるの続きです。
Seleniumとやらを動かしてみます。
Selenium公式: https://www.seleniumhq.org/
Mavenの設定ファイルの修正
- pom.xmlに依存ライブラリを追記
pom.xml
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.12.0</version>
</dependency>
サンプルコードの作成
- chromedriverのダウンロード
- http://chromedriver.chromium.org/downloads
- 上のURLにアクセス→最新版のdriverを選択→自身PCのOSのものを選択
SeleniumMain.java
package com.example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
public class SeleniumMain {
public static void main(String[] args) {
final String PATH = "(chromedriverの格納されている場所)";
System.setProperty("webdriver.chrome.driver", PATH);
WebDriver driver = new ChromeDriver();
final String URL = "http://www.google.com";
driver.get(URL);
WebElement element = driver.findElement(By.name("q"));
element.sendKeys("selenium");
element.submit();
new WebDriverWait(driver, 10).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return d.getTitle().toLowerCase().startsWith("selenium");
}
});
System.out.println("Page title is: " + driver.getTitle());
driver.quit();
}
}
- SeleniumMain.javaを実行すると、Chromeブラウザを開いてseleniumを検索する
動的WEBプロジェクトへ変換
- プロジェクトを選択→プロパティ→プロジェクトファセット→動的Webモジュールを選択
- pom.xmlに依存ライブラリを追記
pom.xml
<dependency>
<groupId>tomcat</groupId>
<artifactId>servlet</artifactId>
<version>4.1.36</version>
</dependency>
テスト対象ファイルの作成
- WebContent直下にindex.jspファイルを作成する
index.jsp
<%@ page import="java.util.* "%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String pageTitle = "Fruits Shop";
List<String> fruitsList = Arrays.asList("Apple", "Banana", "Cherry");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%= pageTitle %></title>
</head>
<body>
<h1><%= pageTitle %></h1>
<ul>
<%
for (String fruits: fruitsList) {
out.println("<li>" + fruits + "</li>");
}
%>
</ul>
</body>
</html>
- tomcat(8.0)にデプロイして実行
- http://localhost:8080/maven_sample/index.jsp へアクセスする
Seleniumによるテストコードの作成
SeleniumTest.java
package com.example;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import java.util.List;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class SeleniumTest {
@Test
public void test() {
final String PATH = "(chromedriverの格納されている場所)";
System.setProperty("webdriver.chrome.driver", PATH);
WebDriver driver = new ChromeDriver();
final String URL = "http://localhost:8080/maven_sample/index.jsp";
driver.get(URL);
String expectPageTitle = "Fruits Shop";
String pageTitle = driver.getTitle();
assertThat(pageTitle, is(expectPageTitle));
WebElement h1 = driver.findElement(By.tagName("h1"));
assertThat(h1.getText(), is(expectPageTitle));
List<WebElement> liList = driver.findElements(By.tagName("li"));
assertThat(liList.size(), is(3));
assertThat(liList.get(0).getText(), is("Apple"));
assertThat(liList.get(1).getText(), is("Banana"));
assertThat(liList.get(2).getText(), is("Cherry"));
driver.quit();
}
}
おわりに
なんとかSeleniumを使えました。
これでスクレイピングがで、き、、、
参考になれば幸いです。
→ Selenideをやってみる