🐕
【Selenium】Javaでの書き方
結合テストで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を使うことで色々できます。
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はちょっとめんどくさいなって思ったり、思わなかったり、、、笑
誰かの参考になれば嬉しいです。
参考:
Discussion