テスト自動化の便利ツール

#はじめに
最近RPAは流行っているようですね。テスト自動化もRPAの範疇にあるかと思います。
テスト自動化にいろんなツールがありますが、無料で使えるツールは

- Selenium
- RobotFramework

などは有名です。

#Seleniumとは
Seleniumはいくつかのツールで構成したテストシステムです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346425/f6884c0b-dc67-25e5-aeed-c012cb604bfa.png)

https://docs.seleniumhq.org/projects/

##WebDriver
###ライブラリ導入
```build.gradle
// https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java
compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.141.59'

// https://mvnrepository.com/artifact/commons-io/commons-io
compile group: 'commons-io', name: 'commons-io', version: '2.6'
```

###ローカルのWebDriver起動してテストしてみる
```Selenium.java
package selenium;

import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class Selenium {

	private static DateFormat DF = new SimpleDateFormat("yyyyMMdd HHmmssSSS");

	public static void main(String[] args) throws Exception {
		// http://chromedriver.chromium.org/downloads
		// ドライバを設定
		System.setProperty("webdriver.chrome.driver", "/selenium/76_driver/chromedriver.exe");
		WebDriver driver = new ChromeDriver();
		
		// ブラウザ起動して、yahooをアクセスする
		driver.get("https://www.yahoo.co.jp/");
		// yahooのトップページのエビデンスを作成する
		makeEvidence(driver);

		// キーワード入力欄の要素を取得する
		WebElement searchBox = driver.findElement(By.name("p"));
		// キーワード「blockchain」を入力する
		searchBox.sendKeys("blockchain");
		// キーワードを入力した状態のエビデンスを取得する
		makeEvidence(driver);

		// 検索を行う
		searchBox.submit();
		// 検索結果のエビデンスを作成する
		makeEvidence(driver);

		// ブラウザを閉じる
		driver.quit();
	}

	/**
	 * エビデンスを作成する
	 * 
	 * @param webdriver Webドライバ
	 * @throws Exception
	 */
	public static void makeEvidence(WebDriver webdriver) throws Exception {
		String fileName = "c:/data/evidence/" + DF.format(new Date()) + ".png";
		File src = ((TakesScreenshot) webdriver).getScreenshotAs(OutputType.FILE);
		File dest = new File(fileName);

		// ファイルを移動
		FileUtils.moveFile(src, dest);
	}
}

```

###リモートのWebDriver起動してテストしてみる
Selenium Gridサービスを構築して、リモートサーバにてテストできます。
Docker、jenkinsでもSelenium Gridサービスを簡単に作成できます。

```Selenium.java
// Selenium Gridがある場合はリモートサーバで実行できます。
// Jenkinsの場合はwebdriverの設定が必要です。
DesiredCapabilities chromeCapabilities = DesiredCapabilities.chrome();
//chromeCapabilities.setVersion("78");
WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), chromeCapabilities);	
```

WebDriverのバージョンと実際インストールしたバージョンが合わない場合は下記のエラーが出ます。

```text
Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version 78
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
```

${JENKINS_HOME}/Jenkins/tools/chromedriverのドライバーを差し替えで対応する必要があります。

参考URL：https://wiki.jenkins.io/display/JENKINS/Selenium+Plugin

##Selenium IDE
###インストール
Chrome: https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd?hl=ja
Firefox: https://addons.mozilla.org/ja/firefox/addon/selenium-ide/

###使ってみる
・起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346425/5cdc848d-2d00-6369-ac50-1c713cdd4413.png)

・Create a new project
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346425/40f1fe11-3b0d-5135-4969-5eb9f73c57a2.png)

・プロジェクトの画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346425/025f76d1-95b4-961c-6b65-41c8519b3552.png)

・レコーディング
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346425/41129f0a-86e6-fd9a-f2da-9013effe65a1.png)

START RECORDINGボタンを押すと、画面操作を行う。停止するとプロジェクトに反映されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346425/af02dbc5-04c6-5274-4c49-2a0306b21b54.png)

・再生
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346425/cf99140b-c09c-4b8c-8699-9abefa32d7c4.png)

・再生結果：問題なく実行されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346425/f1a1206a-0621-fbf6-f156-4f193906d993.png)


#RobotFrameworkとは

Robot Framework is a generic open source automation framework for acceptance testing, acceptance test driven development (ATDD), and robotic process automation (RPA). 

##インストール
`pip install robotframework`

##実行例
`robot QuickStart.rst`

##API
https://robot-framework.readthedocs.io/en/latest/


##サンプル
https://robotframework.org/#examples


以上