トップページ > Selenium API(逆引き) > 【Java】beforeClick/afterClick

【Java】beforeClick/afterClick・・・要素がクリックされる直前/直後の処理を実施する

【PR】業界トップクラスの「高単価報酬」「低マージン」を実現!レバテックフリーランス

「beforeClick/afterClick」を実行することで要素がクリックされる直前/直後の処理を実施することが出来ます。

イベント処理をするためにまず初めにすることは、イベント捕捉クラスを定義することです。ここで、イベント捕捉クラスをDriverEventListenerクラスと命名します。DriverEventListenerクラスは、WebDriverListenerインターフェースを継承して作成されたサブクラスです。DriverEventListenerクラスでイベントに対応した各関数をオーバーライドします。ここでは、「beforeClick/afterClick」の関数の内容をオーバーライドしています。

イベントを発生させる前にやるべきことがあります。イベント発生クラスである「EventFiringDecorator」コンストラクタの引数にイベント捕捉クラスとWebDriverのインスタンスを指定して、イベント発生クラスのインスタンスを作成する必要があります。そうすることでイベント発生がイベント捕捉クラスに通知できるようになります。

それでは、実際にイベント発生させていきます。イベント発生は、イベント発生クラスのインスタンスに対して操作することで発生させていきます。下記サンプルではページ遷移(GoogleTopページ)をした後、検索テキストボックスの要素を取得しています。

この段階では、「beforeClick/afterClick」の関数が自動で呼び出される条件は満たしていません。この関数が自動で呼び出されるトリガーとなる操作(イベントが発生する操作)は、クリック操作がされた時です。そのため、以下では「Gmail」のリンクテキストがクリック操作されたときに初めてイベントが発生し、クリック前後の「Gmail」のリンクテキストがEnableかどうかコンソール出力しています。クリック後(Gmailページに遷移後)は「Gmail」のリンクテキストはページ内に存在しないので、「null」が出力されます。

※イベント処理についてはこちら

説明

◆メソッド
  ・public void beforeClick(WebElement element, WebDriver driver) 
  ・public void afterClick(WebElement element, WebDriver driver) 
◆使用形態
  ・上記メソッドはあらかじめWebDriverListenerインターフェースを継承して
         オーバーライドしておく。
◆備考
  ・このイベントはclick()メソッドの実行にて発生する
◆関連項目
  ・ブラウザの『戻る』または『進む』に対して直前/直後の処理を実施する
  ・URLが遷移する直前/直後の処理を実施する

サンプル

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.events.EventFiringDecorator;
import org.openqa.selenium.support.events.WebDriverListener;

public class WebTest {
  public static void main(String[] args){
    //Chrome制御のためChromeDriverのパスを指定
    System.setProperty("webdriver.chrome.driver",
		                                    "D:\\AutoTest\\chromedriver.exe");
    //Chromeを起動する
    WebDriver driver = new ChromeDriver();
	//イベント捕捉クラスのインスタンスを作成する
	WebDriverListener eventListener = new DriverEventListener();
	//対象のWebDriverとイベント捕捉クラスをイベント発生クラスへ登録する
	WebDriver decorated = new EventFiringDecorator(eventListener).decorate(driver);
	//指定したURLを開く
	decorated.get("https://www.google.co.jp");
	//「Gmail」のリンクテキストの要素をリンクテキスト名から取得
	WebElement element = decorated.findElement(By.linkText("Gmail"));
	//「Gmail」のリンクテキストをクリックする
	element.click();
  }
}
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.events.WebDriverListener;

public class DriverEventListener implements WebDriverListener {
  //値が変化する直前の処理
  @Override
  public void beforeClick(WebElement element){
    boolean button = element.isEnabled();
    System.out.println(button);
  }
  @Override
  public void afterClick(WebElement element){
    boolean button = element.isEnabled();	
    System.out.println(button);	
  }
}
※selenium version 4.1.4で動作確認をしています(ブラウザのUIや属性値などが変更された場合、実行結果が異なる可能性があります)

実行結果

TRUE
警告: null
before_after_click
 ※GoogleおよびGoogleロゴはGoogle Inc.の登録商標であり、同社の許可を得て使用しています。

Warning: Invalid argument supplied for foreach() in /home/users/1/monda-muki/web/seleniumqref.com/api/java/event/Java_ClickOn.html on line 200

JavaAPIアクセス TOP10
過去1週間(3/22~3/28)

    カテゴリー

    環境構築

    APIリファレンス

    その他

    ページ上部へ戻る
    トップページ > Selenium API(逆引き) > 【Java】beforeClick/afterClick
    Copyright © 2016- Seleniumクイックリファレンス All Rights Reserved