ども、toshiです。
Selenium話の続きです。
今回は、Selenium IDEで作ったパターンから
Javaのコードを作ってみましょう。
エクスポートしてみる。
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; } } }
これで無事実行されました。