現在のブラウザーは、保護されている WebDriverCache フィールドに格納されます。Selenium2Library を拡張して WebDriver を公開することもできますが、この単純なユース ケースでは、代わりにリフレクションを使用する方がよいと思います。このようにして、元の Selenium2Library を操作できます。他の人は違うと感じるかもしれません。両方をデモンストレーションします。
どちらのソリューションも Get Current Browser キーワードを提供しており、結果を取得してライブラリのコンストラクターなどに渡すことができます。
これは、リフレクションを使用して WebDriverCache にアクセスし、それを公開するキーワードを持つライブラリです。
// default package
import java.lang.reflect.Field;
import org.openqa.selenium.WebDriver;
import org.robotframework.selenium2library.keywords.BrowserManagement;
import org.robotframework.selenium2library.utils.WebDriverCache;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Misc {
public static void goToGoogle() {
getCurrentBrowser().get("http://www.google.com");
}
public static WebDriverCache getWebDriverCache() {
try
{
BrowserManagement bm = (BrowserManagement) getLibraryInstance("Selenium2Library");
Field cacheField = BrowserManagement.class.getDeclaredField("webDriverCache");
cacheField.setAccessible(true);
return (WebDriverCache) cacheField.get(bm);
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
public static WebDriver getCurrentBrowser() {
return getWebDriverCache().getCurrent();
}
private static Object getLibraryInstance(String library) throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");
engine.put("library", library);
engine.eval("from robot.libraries.BuiltIn import BuiltIn");
engine.eval("instance = BuiltIn().get_library_instance(library)");
return engine.get("instance");
}
}
以下に、Selenium2Library キーワードとその他のキーワードを組み合わせて使用する方法を示します。
*** Settings ***
Test Teardown Close All Browsers
Library Selenium2Library
Library Misc
*** Test Cases ***
Get Current Browser Test
Open Browser http://slashdot.org
Go To Google
Title Should Be Google
代わりにカスタム Selenium2Library を使用したい場合 (継承)、以下に例を示します。
// default package
import org.openqa.selenium.WebDriver;
public class MySelenium2Library extends Selenium2Library
{
public WebDriver getCurrentBrowser() {
return this.webDriverCache.getCurrent();
}
}
Robot Framework から直接 WebDriver インスタンスと対話して、例をより単純にします。
*** Settings ***
Test Teardown Close All Browsers
Library MySelenium2Library
*** Test Cases ***
Get Current Browser Test
Open Browser http://slashdot.org
${driver}= Get Current Browser
Call Method ${driver} get http://www.google.com
Title Should Be Google