Selenide をローカルの file から open してみる

Selenide 良いですね。 さて、わかる人にだけ伝われば良いやシリーズです。

Selenide 使って最初にアクセスするページが http が https とは限りません。HTML のドキュメントそのもの(文字列)ということだってあるわけです。Selenide のサンプル見ると、

open("/login");

とか

open("http://www.google.com/");

とかなわけですよ。 まぁ、外部サービス連携なんかすると、普通は Location ヘッダに移動先の URL があるでしょうからそれを使うでしょう。ただ、世の中そんなシステムだけじゃない。HTML のコンテンツを返すからそれをブラウザに流して処理を続けてよね、って奴もあります。

そんな時 Selenide ではどうするか?

@Test
public void test() throws IOException {
    String contents = "<html>...</html>";   //ここに HTML のコンテンツが入ってると思ってください

    Path tempFile = File.createTempFile("temp", ".html").toPath();
    try {
        try (BufferedWriter writer =
                     Files.newBufferedWriter(tempFile, StandardCharsets.UTF_8)) {
            writer.append(contents);
        }

        HogePage firstPage = open(tempFile.toUri().toString(), HogePage.class);
        HogePage secondPage = firstPage.clickNext();
        secondPage.clickNext();
    } finally {
        Files.delete(tempFile);
    }
}

@Data
private static class HogePage {
    private final ElementsCollection submitButtons = $$("input[type=submit]");

    public HogePage clickNext() {
        submitButtons.first().click();
        return page(HogePage.class);
    }
}

拡張子見てたのね...これにハマること数時間...。私と同じ失敗は繰り返しませんように。

ちなみにHTMLのコンテンツが Shift_JIS とかの場合は、ファイルをその Charset に合わせることで化けなくなりますヨ