2023/02/23 このエントリーをはてなブックマークに追加 はてなブックマーク - 今年(2023年)に入ってからSelenium WebDriverが不安定!!原因はHeadless!?

今年(2023年)に入ってからSelenium WebDriverが不安定!!原因はHeadless!?

カテゴリ: ,



はい。ありがちなタイトルにしました。
これは単純にSelenium使ってる多くの人に見てほしいからです。

twitterで検索すると「何故か動かなくなった」とか「自己解決した」とか書いてあって、多くの人に情報が届いてないじゃないかなと。困ってる人もいるかなと思ってブログにしとくかぁ〜と思いましたん



2015/12/24 このエントリーをはてなブックマークに追加 はてなブックマーク - KotlinのSeleniumライブラリKebabを作ってる #ktac2015 #jkug

KotlinのSeleniumライブラリKebabを作ってる #ktac2015 #jkug

カテゴリ: , , , ,




こちらはKotlinアドベントカレンダー2015の24日目の記事です。





みなさん、Kotlin書いてますか?興味ありますか?
多分、どちらかの人がこのアドベントカレンダーを見てくれているのだと思います。

2014のKotlinアドベントカレンダーにも参加させていただきましたが、
ほんとにKotlin人口がここ1年で急激に増えて感慨深いものがあります(しみじみ)


今回のブログはgebインスパイア系のKebabというライブラリを作っているっていう話です。

https://github.com/yyYank/Kebab




名前は適当ですが、ケバブだと美味しそうですよねw
はい!…はい。




2015/03/01 このエントリーをはてなブックマークに追加 はてなブックマーク - 続・【Selenium WebDriver】wait処理のCustomConditionを作る

続・【Selenium WebDriver】wait処理のCustomConditionを作る

カテゴリ: ,


http://www.softwaretestingclass.com/what-is-selenium-webdriver-selenium-training-series/より引用


前回に書いた記事の waitのCustomConditionなのですが、微妙な気がしたので書き直しました。



2015/02/26 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Selenium WebDriver】wait処理のCustomConditionを作る

【Selenium WebDriver】wait処理のCustomConditionを作る

カテゴリ:


http://www.softwaretestingclass.com/what-is-selenium-webdriver-selenium-training-series/より引用





・selenium-java version 2.44.0






WebDriverWaitは描画処理などの関係でwaitをかけることに特化したクラス。
waitを使うときには以下のように書く。



 
 WebDriverWait wait = new WebDriverWait(driver, 10);
 wait.until(ExpectedConditions.alertIsPresent());
 // 処理
 doSomething();
 ・・・・
 



WebDriverWaitのインスタンスを生成し、untilメソッドで引数で
渡した条件(ExceptedCondtionインスタンス)がtrueになるまで待つ。

(正確に言えば、untilメソッドの引数は
com.google.common.base.Functionインターフェースか
com.google.common.base.Predicateの具象クラスインスタンス。
ExceptedCondtionはFunctionを継承している)



ExpectedConditionsはExpectedConditionインターフェース型の
無名クラスインスタンスを生成するstaticメソッドを持っているのでこのような記述になる。
(ExpectedConditionsクラスとExpectedConditionクラスって紛らわしい)




2015/02/08 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Selenium2 WebDriver】マルチブラウザのWebDriverをJUnitから実行する

【Selenium2 WebDriver】マルチブラウザのWebDriverをJUnitから実行する

カテゴリ: , ,



http://www.code-thrill.com/2012/03/selenium-walkthrough.htmlより引用






とりあえずIEとChromeとFirefoxを簡単に動かせる実装をする






・IEとChromeなどのDriver.exeを用意する



ダウンロードはSeleniumのオフィシャルから。



・プロパティファイルを用意する



こんな感じ


#IE
driver.ie.exe=C:\\IEDriverServer.exe
driver.ie.key=webdriver.ie.driver
driver.ie.driverclass=org.openqa.selenium.ie.InternetExplorerDriver

#Chrome
driver.chrome.exe=C:\\chromedriver.exe
driver.chrome.key=webdriver.chrome.driver
driver.chrome.driverclass=org.openqa.selenium.chrome.ChromeDriver

#Firefox
driver.ff.driverclass=org.openqa.selenium.firefox.FirefoxDriver







JUnit4.9から導入された@Ruleを利用して、マルチブラウザ対応をしてみようと思う。
便利ですね。Ruleアノテーション。最近まで全然知らなかったので地味に感動してる。










まずは簡単なRuleクラスとデータの受け渡し用のstaticなクラスを作る。
(誰かデータの受け渡し方にもっと良い方法があれば教えてください)






public class BrowserRule implements MethodRule {
    private final String[] paths;

    public BrowserRule(String... paths) {
        this.paths = paths;
    }

    public Statement apply(final Statement base, FrameworkMethod method, Object target) {

        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                for (String path :  paths) {
                    ModeContext.setBrowserName(path);
                    base.evaluate();
                }
            }
        };
    }
}


public class ModeContext {

    private static String browserName;
    private ModeContext () {}
    
    public static void setBrowserName(String name) {
        browserName = name;
    }
    
    public static String getBrowserName() {
        return browserName;
    }
}





呼び出し側はこんな感じで@Ruleをつけてコンストラクタ引数に任意のブラウザ名を渡すだけ。
keyのバインドがダサいなぁ。。。。

Firefoxに関しては、Systemプロパティの設定が不要らしい。普通に動く。
(ブラウザの設定を変えたりするにはプロファイルの設定とか必要だったりするらしい。)





public class HogeHogeTest {

    @Rule
    public BrowserRule browserRule = new BrowserRule("ie"); // ie
    //public BrowserRule browserRule = new BrowserRule("chrome"); chrome
    //public BrowserRule browserRule = new BrowserRule("ff"); firefox
    //public BrowserRule browserRule = new BrowserRule("ie","chrome","ff"); これもできる

    public WebDriver driver;


    @Before
    public void startUpClass() throws Exception {
        Properties prop = loadProperties();
        final String browser = ModeContext.getBrowserName();
        final String[] PROP_KEYS = new String[] { "driver." + browser + ".exe", "driver." + browser + ".key", "driver." + browser + ".driverclass"};
        if(!browser.equals("ff")) {
            Path path = Paths.get(prop.getProperty(PROP_KEYS[0]));
            System.setProperty(prop.getProperty(PROP_KEYS[1]), path.toAbsolutePath().toString());
        }
        Class<?> clazz = Class.forName(prop.getProperty(PROP_KEYS[2]));
        driver = (WebDriver) clazz.newInstance();
        driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
        driver.manage().timeouts().setScriptTimeout(3, TimeUnit.MINUTES);
        driver.get("http://localhost:8080/hogehoge");
    }

    private Properties loadProperties() {
        try {
            ClassLoader loader = Thread.currentThread().getContextClassLoader();
            Properties prop = new Properties();
            prop.load(loader.getResourceAsStream("DriverSetting.properties"));
            return prop;
        } catch (IOException e) {
            throw new IllegalStateException("failed load DriverSetting.properties ", e);
        }
    }
}















ここまで作るのだけならとても簡単です。
ただ、ここから実際に複数のブラウザでテストを実行すると
テストが赤くなりまくりますね。ブラウザの差異があるのでどうしてもそうなってしまう。
差異とは、画面描画時の位置が微妙に変わりElementNotBisibleExceptionが発生したりとか
そういうことです。そのほかにもブラウザ特有のものとか、、、きっとあるでしょう。



やるなら、はじめに1つのブラウザから始めることを推奨します。
その後マルチブラウザ対応というのが良いのではないでしょうか。















2015/01/30 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Selenium2】WebDriverでハマったところとかTips8選

【Selenium2】WebDriverでハマったところとかTips8選

カテゴリ: ,


http://www.softwaretestingclass.com/what-is-selenium-webdriver-selenium-training-series/より引用








最近、Selenium WebDrvierを利用する機会を得ている。


自動テストはやはり便利。打鍵やるのはバカらしいなって気分になる。
ただ、あんまり難しいことしようとするとどうしても作りこみが必要。


GebというWebDriverのラッパーがかゆいところに手が届く感じらしいので、
次回は検討しようかなぁ。

参考
脱・独自改造! GebでWebDriverをもっとシンプルに


使い始めて感じたことやTIPSをメモがてら残しておこうと思う。


GA