Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Selenium IDEからJavaファイルを出力して実行。

ども、toshiです。

Selenium話の続きです。


今回は、Selenium IDEで作ったパターンから
Javaのコードを作ってみましょう。

まずは1パターン作ってみる。

以下のように、googleseleniumを検索するパターンを作ってみます。

エクスポートしてみる。

Seleniumで1パターンできたら、Javaのコードをエクスポートしてみます。

エクスポートのメニューはこちら。


エクスポートして、javaファイルを作ります。

それがこちら

package com.example.tests;

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestCaseSelenium_org {
	private WebDriver driver;
	private String baseUrl="";
	private StringBuffer verificationErrors = new StringBuffer();
	@Before
	public void setUp() throws Exception {
		driver = new FirefoxDriver();
		driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
	}

	@Test
	public void testCaseSelenium() throws Exception {
		driver.get("/ig?hl=ja");
		driver.findElement(By.id("q")).clear();
		driver.findElement(By.id("q")).sendKeys("Selenium 2.0");
		driver.findElement(By.id("btnG")).click();
		// ERROR: Caught exception [ERROR: Unsupported command [isTextPresent]]
	}

	@After
	public void tearDown() throws Exception {
		driver.quit();
		String verificationErrorString = verificationErrors.toString();
		if (!"".equals(verificationErrorString)) {
			fail(verificationErrorString);
		}
	}

	private boolean isElementPresent(By by) {
		try {
			driver.findElement(by);
			return true;
		} catch (NoSuchElementException e) {
			return false;
		}
	}
}

動かしてみる。

しかしながら、これではURLが何も入っていないので修正します。
また、以下のようにverifyTextPresentは変換されないようです。
ひとまず置いておきましょう。 

 // ERROR: Caught exception [ERROR: Unsupported command [isTextPresent]]

修正したのもが以下。

package com.example.tests;

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestCaseSelenium {
	private WebDriver driver;
	// ★baseUrlを設定します。★
	private String baseUrl="http://www.google.co.jp";
	private StringBuffer verificationErrors = new StringBuffer();
	@Before
	public void setUp() throws Exception {
		driver = new FirefoxDriver();
		driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
	}

	@Test
	public void testCaseSelenium() throws Exception {
		// ★baseUrlにします。★
		driver.get(baseUrl);
		driver.findElement(By.id("q")).clear();
		driver.findElement(By.id("q")).sendKeys("Selenium 2.0");
		driver.findElement(By.id("btnG")).click();
		// ERROR: Caught exception [ERROR: Unsupported command [isTextPresent]]
	}

	@After
	public void tearDown() throws Exception {
		driver.quit();
		String verificationErrorString = verificationErrors.toString();
		if (!"".equals(verificationErrorString)) {
			fail(verificationErrorString);
		}
	}

	private boolean isElementPresent(By by) {
		try {
			driver.findElement(by);
			return true;
		} catch (NoSuchElementException e) {
			return false;
		}
	}
}


これで、Eclipseでサンプルプロジェクトを作って実行してみます。

しかしながら、私の環境ではこれでも以下のエラーが出て
上手く動きませんでした。
(なお、リンク先も現時点では作成中でした^^;)

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"q"}
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html

どうやら、コンポーネントの選択時にidが利用できないようです。


最終的に、以下のように修正しました。

package com.example.tests;

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestCaseSelenium {
	private WebDriver driver;
	private String baseUrl="http://www.google.co.jp";
	private StringBuffer verificationErrors = new StringBuffer();
	@Before
	public void setUp() throws Exception {
		driver = new FirefoxDriver();
		driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
	}

	@Test
	public void testCaseSelenium() throws Exception {
		driver.get(baseUrl);
		// ★idをnameに修正します。★
		driver.findElement(By.name("q")).clear();
		driver.findElement(By.name("q")).sendKeys("Selenium 2.0");
		driver.findElement(By.name("btnG")).click();
		// ERROR: Caught exception [ERROR: Unsupported command [isTextPresent]]
	}

	@After
	public void tearDown() throws Exception {
		driver.quit();
		String verificationErrorString = verificationErrors.toString();
		if (!"".equals(verificationErrorString)) {
			fail(verificationErrorString);
		}
	}

	private boolean isElementPresent(By by) {
		try {
			driver.findElement(by);
			return true;
		} catch (NoSuchElementException e) {
			return false;
		}
	}
}


これで無事実行されました。


ただし、実際には実行確認するコード(verify)が必要ですが^^;