🍕

【Selenium】Javaでの書き方

2022/08/18に公開

結合テストでSeleniumを使ったのでメモ。
個人的にPythonで使ったことがあったのですが、Javaでできるとは知らなかったです。

目次
  • 取得

    • 要素の取得
      • driver.findElement
      • driver.findElements
    • 属性値の取得
      • getAttribute
      • 属性値の取得
      • タグで囲われたテキストの取得
      • 選択されている要素を取得(selected)
  • 操作

    • プルダウン選択
    • 要素をクリック
    • テキストを入力
  • 判定

    • 要素が表示されているかどうか
    • 要素が有効かどうか
    • 要素が選択されているかどうか
    • 画面上に特定の文字列が存在するかどうか
  • アクティブ画面切り替え

    • アラート
      • メッセージ取得
      • OKボタンを押下
    • iframe
  • 待機

    • 要素が見つかるまで処理を待機
  • まとめ

取得

要素の取得

driver.findElement

Java
private WebDriver driver;
WebElement element = null;

WebElement elementId = driver.findElement(By.id("検証モードでコピーしたid"));
WebElement elementXpath = driver.findElement(By.xpath("検証モードでコピーしたxpath"));
WebElement elementCss = driver.findElement(By.cssSelector("検証モードでコピーしたselector"));

一番よく使ったのがxpathでした。
でもこれは好みの問題かもしれません。

driver.findElements

複数取得したいときは、sをつけてfindElementにします。

HTML
<select id="fluits”>
        <option value=""></option>
        <option value="apple">りんご</option>
        <option value="banana">バナナ</option>
        <option value="melon">メロン</option>
</select>
Java
private WebDriver driver;
WebElement element = null;

element = driver.findElements(By.cssSelector("#fluits > option"));
int size = element.size();
結果
size = 4;

私は、個数を知りたいときに使いました。

属性値の取得

getAttribute

HTML
<p id="tomato1" class="redText yellowBk" value="tomato"></p>
Java
private WebDriver driver;

String valueText = driver.findElement(By.id("tomato1")).getAttribute("value");
String classText = driver.findElement(By.id("tomato1")).getAttribute("class");
String idText = driver.findElement(By.id("tomato1")).getAttribute("id");
結果
valueText = "tomato";
classText = "redText yellowBk";
idText = "tomato1";

value値やclassを取得できます。

タグで囲われたテキストの取得

getText

HTML
<p id="greeting">Hello!!</p>
Java
private WebDriver driver;

String text = driver.findElement(By.id("greeting")).getText();
結果
text = "Hello!!";

pタグやspanタグなど、タグ内のテキストを取得できます。

選択されている要素を取得(selected)

new Select

HTML
<select id="fluits”>
        <option value=""></option>
        <option value="apple">りんご</option>
        <option value="banana" selected>バナナ</option>
        <option value="melon" selected>メロン</option>
</select>
Java
Select dropdown = new Select(driver.findElement(By.id("fluits")));
WebElement firstSelectedOption = dropdown.getFirstSelectedOption(); //1つ バナナの要素が取得できる
List<WebElement> allSelectedOptions = dropdown.getAllSelectedOptions(); //複数 バナナとメロンの要素が取得できる

操作

プルダウン選択

HTML
<select id="fluits”>
        <option value=""></option>
        <option value="apple">りんご</option>
        <option value="banana">バナナ</option>
        <option value="melon">メロン</option>
</select>
Java
Select dropdown = new Select(driver.findElement(By.id("fluits")));
dropdown.selectByVisibleText("バナナ");

要素をクリック

Java
element = driver.findElement(By.id("exampleLink"));
element.click();

テキストボックスやaタグをクリックすることが多いと思います。

テキストをクリア

Java
WebElement element = driver.findElement(By.id("exampleTextBox"));
element.clear();

テキストを入力

Java
WebElement element = driver.findElement(By.id("exampleTextBox"));
element.sendKeys("スイカ");

他にも操作系は、keysを使うことで色々できます。
https://www.selenium.dev/ja/documentation/webdriver/actions_api/keyboard/

Use the Java Keys enum
https://github.com/SeleniumHQ/selenium/blob/selenium-4.2.0/java/src/org/openqa/selenium/Keys.java#L28

判定

Java
private WebDriver driver;
WebElement element = null; //ここで要素取得

前提としてelementに何か要素を取得しておくと仮定します。
(面倒なのでnullと書いてます。。。)

要素が表示されているかどうか

Java
Boolean isDisplayed = element.isDisplayed();

要素が有効かどうか

Java
Boolean isDisplayed = element.isDisplayed();

要素が選択されているかどうか

Java
Boolean isSelected= element.isSelected();

画面上に特定の文字列が存在するかどうか

Java
Boolean isExist = driver.getPageSource().contains("Hello!!");

アクティブ画面切り替え

アラート

メッセージ取得

Java
private WebDriver driver;
driver.switchTo().alert().getText();

OKボタンを押下

Java
private WebDriver driver;
driver.switchTo().alert().accept();

iframe

Java
private WebDriver driver;
driver.switchTo().frame(driver.findElement(By.cssSelector(".iziModalDisplay > div.iziModal-wrap > div > iframe")));

こんな感じで、driver.switchTo().frame();でiframeの画面がアクティブになります。

待機

要素が見つかるまで処理を待機

Java
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("loading")));

まとめ

慣れないうちは、書き方忘れるので一覧にしました。
もっと色々やれることはあると思いますが、大体使うものをまとめました。
結構たくさんありました。

最初は動くのおもしろかったんですがSeleniumはちょっとめんどくさいなって思ったり、思わなかったり、、、笑
誰かの参考になれば嬉しいです。

参考:
https://www.selenium.dev/ja/documentation/webdriver/

Discussion