での Cookie の処理方法 Selenium webdriver

⚡ スマートサマリー

Cookieは、ユーザー設定とセッション識別子をキーと値のペアとして保存し、 Selenium WebDriverはそれらを読み取り、保存、再生できるため、自動テストでは以降の実行時に毎回ログイン画面をスキップできます。

  • 🔘 クッキーの基本: Cookieには、名前、値、ドメイン、パス、有効期限、およびsecureフラグとHttpOnlyフラグが含まれています。
  • ☑️ 6つのコマンド: getCookies、getCookieNamed、addCookie、deleteCookie、deleteCookieNamed、deleteAllCookiesは、すべての操作を網羅しています。
  • ✅ 2段階のデモ: ステップ1では認証クッキーをファイルに書き込み、ステップ2ではそれを再生して新しいセッションを認証します。
  • 🧪 節約した時間: セッションクッキーを再利用することで、すべてのテストケースからログイン手順が削除され、全体の実行時間が短縮されます。
  • 🛠️ 編集なし: Cookie はその場で変更できないため、古い Cookie を削除し、Cookie.Builder を使用して再構築したコピーを追加してください。
  • ⚠️ ドメインルール: addCookieを呼び出す前に、対象サイトにアクセスしてください。そうしないと、ブラウザはCookieを拒否します。

クッキーの扱い方 Selenium webdriver

HTTP Cookieは、ユーザーとその設定に関する情報で構成されています。キーと値のペアを使用して情報を保存します。これは、ユーザーがWebサイトを閲覧している間、Webアプリケーションから送信され、Webブラウザに保存される小さなデータです。

この分野に初めて触れる方は、まずこのガイドから始めてください。 クッキーのテスト.

Selenium Cookie のクエリコマンド

In Selenium WebDriverでは、以下の組み込みメソッドを使用してCookieを照会したり操作したりできます。これらのメソッドはすべてdriver.manage()を介してアクセスでき、Optionsインターフェースを返します。

Selenium クエリコマンド 出力
driver.manage().getCookies(); すべてのクッキーのリストを返します
driver.manage().getCookieNamed(arg0); 指定された名前のクッキーを返します
driver.manage().addCookie(arg0); クッキーを作成して追加します
driver.manage().deleteCookie(arg0); 特定のクッキーを削除します
driver.manage().deleteCookieNamed(arg0); 指定された名前のクッキーを削除します
driver.manage().deleteAllCookies(); すべてのクッキーを削除します

Cookie を処理する (受け入れる) 理由 Selenium?

各 Cookie は、名前、値、ドメイン、パス、有効期限、および安全かどうかのステータスに関連付けられています。 クライアントを検証するために、サーバーは Cookie 内のこれらの値をすべて解析します。

   テスト ウェブアプリケーション Selenium WebDriverでは、Cookieを作成、更新、または削除する必要がある場合があります。

例えば、オンラインショップを自動化する場合ping アプリケーションによっては、注文、カートの表示、支払い情報、注文確認などのテストシナリオを自動化する必要があるかもしれません。

Cookieが保存されない場合、上記のテストシナリオを実行する前に毎回ログイン操作を行う必要があります。これにより、コーディング作業量と実行時間が増加します。

解決策は、クッキーをファイルに保存することです。 Laterこのファイルからクッキーの値を取得し、現在のブラウザセッションに追加します。その結果、あらゆるログイン手順をスキップできます。 テストケース ドライバーセッションにはこの情報が含まれているためです。

アプリケーションサーバーは、ブラウザセッションを認証済みとして扱い、リクエストされたページに直接アクセスします。 URL.

での Cookie の処理方法 Selenium

我々は使用するだろう https://demo.guru99.com/test/cookie/selenium_aut.php デモの目的のため。

これは 2 ステップのプロセスになります。

ステップ1)アプリケーションにログインし、生成された認証クッキーを保存します。

デモアプリケーションでは、以下に示すようなシンプルなログインフォームが表示されます。

Guru99 Selenium ユーザー名とパスワードの入力欄があるクッキーデモログインフォーム

ステップ2)保存されたCookieを使用して、ユーザーIDとパスワードを使用せずにアプリケーションに再度ログインします。

ステップ1) Cookie情報の保存

package CookieExample;

import java.io.BufferedWriter;		
import java.io.File;		
import java.io.FileWriter;
import java.util.Set;
import org.openqa.selenium.By;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.Cookie;		

public class cookieRead{	
        public static void main(String[] args)		
    {
    	WebDriver driver;	
        System.setProperty("webdriver.chrome.driver","G:///chromedriver.exe");					
		driver=new ChromeDriver();        
		driver.get("https://demo.guru99.com/test/cookie/selenium_aut.php");

       				
        // Input Email id and Password If you are already Register		
        driver.findElement(By.name("username")).sendKeys("abc123");							
        driver.findElement(By.name("password")).sendKeys("123xyz");							
        driver.findElement(By.name("submit")).click();					
        		
        // create file named Cookies to store Login Information		
        File file = new File("Cookies.data");							
        try		
        {	  
            // Delete old file if exists
			file.delete();		
            file.createNewFile();			
            FileWriter fileWrite = new FileWriter(file);							
            BufferedWriter Bwrite = new BufferedWriter(fileWrite);							
            // loop for getting the cookie information 		
            	
            // loop for getting the cookie information 		
            for(Cookie ck : driver.manage().getCookies())							
            {			
                Bwrite.write((ck.getName()+";"+ck.getValue()+";"+ck.getDomain()+";"+ck.getPath()+";"+ck.getExpiry()+";"+ck.isSecure()));																									
                Bwrite.newLine();             
            }			
            Bwrite.close();			
            fileWrite.close();	
            
        }
        catch(Exception ex)					
        {		
            ex.printStackTrace();			
        }		
    }		
}

⚠️ バージョンに関する注記: System.setProperty の行は、元のチュートリアルに書かれているとおりにそのまま残されています。 Selenium 4.6以降、 Selenium Managerは対応するchromedriverを自動的にダウンロードして設定するため、現在の設定ではその行は不要です。以下の元のコードは変更されておらず、コンパイルも正常に完了します。

Code 説明

  • WebDriverインスタンスを作成します。
  • driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”) を使用してウェブサイトにアクセスしてください。
  • アプリケーションにログインします。
  • を使用して Cookie 情報を読み取ります
    driver.manage().getCookies();
  • ファイルを使用してクッキー情報を保存しますWriter 文字のストリームを書き込むクラス、 BufferedWriter Cookies.data という名前のファイルにテキストを書き込みます。
  • Cookies.dataファイルには、クッキーの名前、値、ドメイン、パスといったすべてのクッキー情報が保存されています。この情報を取得することで、ログイン認証情報を入力せずにアプリケーションにログインできます。

上記のコードを実行すると、プロジェクトフォルダ構造内に Cookies.data ファイルが作成されます。このファイルを開くと、下のハイライトされた画面に示すように、テスト対象アプリケーション(AUT)のログイン認証情報が Cookie 形式で保存されていることが確認できます。

Cookies.dataファイルの内容は、保存されたセッションCookieを名前、値、ドメイン、パスの形式で示しています。

ステップ 2) 保存された Cookie を使用してアプリケーションにログインする

次に、ステップ1で生成されたクッキーにアクセスし、それを使用してアプリケーション内でのセッションを認証します。

package CookieExample;

import java.io.BufferedReader;		
import java.io.File;		
import java.io.FileReader;		
import java.util.Date;		
import java.util.StringTokenizer;		
import org.openqa.selenium.Cookie;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.chrome.ChromeDriver;

public class CookieWrite		
{		
  
	public static void main(String[] args){ 
    	WebDriver driver;     
       	System.setProperty("webdriver.chrome.driver","G://chromedriver.exe");					
        driver=new ChromeDriver();					
    try{			
     
        File file = new File("Cookies.data");							
        FileReader fileReader = new FileReader(file);							
        BufferedReader Buffreader = new BufferedReader(fileReader);							
        String strline;			
        while((strline=Buffreader.readLine())!=null){									
        StringTokenizer token = new StringTokenizer(strline,";");									
        while(token.hasMoreTokens()){					
        String name = token.nextToken();					
        String value = token.nextToken();					
        String domain = token.nextToken();					
        String path = token.nextToken();					
        Date expiry = null;					
        		
        String val;			
        if(!(val=token.nextToken()).equals("null"))
		{		
        	expiry = new Date(val);					
        }		
        Boolean isSecure = new Boolean(token.nextToken()).								
        booleanValue();		
        Cookie ck = new Cookie(name,value,domain,path,expiry,isSecure);			
        System.out.println(ck);
        driver.manage().addCookie(ck); // This will add the stored cookie to your current session					
        }		
        }		
        }catch(Exception ex){					
        ex.printStackTrace();			
        }		
        driver.get("https://demo.guru99.com/test/cookie/selenium_aut.php");					
}	
	}	

出力:ユーザーIDとパスワードを入力することなく、ログイン成功画面に直接移動します。

注:上記のスクリプトを実行した後、ログインページが表示された場合は、強制的にページを更新してください。

⚠️ Java 注意事項: リーダースクリプトでは、`new Boolean(String)` と `new Date(String)` を使用していますが、これらはどちらも JDK でずっと前に非推奨になりました。最新の JDK では、これに相当するのは `Boolean.parseBoolean(token.nextToken())` と `java.time` パーサーです。元の行は上記に残されていますので、注釈は編集ではなく、最新の代替コードとして扱ってください。

Cookie属性と Selenium クッキークラス

上記の2つのスクリプトは、6つのフィールドをファイルとの間でやり取りします。これらのフィールドは、org.openqa.selenium.Cookieクラスが公開するフィールドと全く同じであり、これらを把握することで、ステップ2のトークナイザーループがはるかに読みやすくなります。

属性 アクセサー その意味
名前 getName() サーバーが参照するキー。例えば、JSESSIONIDなど。
値 getValue() 保存されるデータ、通常はセッション識別子。
ドメイン getDomain() ブラウザがクッキーを送信するホスト。
パス getPath() その URL Cookieが適用される対象の接頭辞。
有効期限 getExpiry() クッキーの有効期限。値がnullの場合はセッションクッキーを意味します。
セキュアー isSecure() CookieがHTTPS経由でのみ送信される場合に真となります。
HTTPのみ isHttpOnly() 真の場合 Javaページ上のスクリプトはクッキーを読み取ることができません。
同じサイト getSameSite() 厳格、緩やか、またはなし。追加 Selenium 4.

ステップ2で使用した6つの引数を持つコンストラクタではなく、現在のコードでは通常、内部のBuilderクラスを介してクッキーを作成します。これにより、必要なフィールドのみを設定できます。

Cookie sessionCookie = new Cookie.Builder("JSESSIONID", "A1B2C3D4")
        .domain("demo.guru99.com")
        .path("/")
        .isSecure(true)
        .isHttpOnly(true)
        .build();

driver.manage().addCookie(sessionCookie);

多くの人が見落としがちなルールが一つあります。それは、クッキーオブジェクトは作成後に編集できないということです。値を変更するには、古いクッキーを削除して、新しいコピーを追加する必要があります。だからこそ、ビルダーは非常に便利なのです。

Cookie original = driver.manage().getCookieNamed("JSESSIONID");
driver.manage().deleteCookie(original);

Cookie updated = new Cookie.Builder(original.getName(), "NEW-VALUE")
        .domain(original.getDomain())
        .path(original.getPath())
        .isSecure(original.isSecure())
        .build();

driver.manage().addCookie(updated);

一般的なクッキーエラー Selenium WebDriverとその修正方法

Cookieコードは、ごく限られた、予測可能な方法で不具合を起こす傾向があります。以下の表は、最も頻繁に報告される不具合とその原因、および解決策を示しています。

症状 原因となる 修正する
InvalidCookieDomainException addCookieはサイトにアクセスする前に呼び出されたため、ブラウザはまだabout:blankのままです。 まず対象ドメインでdriver.getを呼び出し、次にクッキーを追加します。
UnableToSetCookieException Cookieのドメインが、現在読み込まれているページと一致しません。 ドメインフィールドを削除するか、開いているページの正確なホスト名を設定してください。
Cookieを追加した後もログインページが表示されます このページは、クッキーが存在する前にレンダリングされました。 上記の注記にある「ハードリフレッシュ」とは、driver.navigate().refresh() を呼び出すことを意味します。
getCookieNamed は null を返します 名前のスペルが間違っているか、クッキーが別のパスまたはサブドメインに属しています。 getCookiesを使ってすべてのクッキーをダンプし、名前を比較してください。
保存されたクッキーは、後続の実行時に拒否されます。 有効期限が切れたか、サーバーがセッションを終了しました。 ステップ1を再度実行して、Cookies.dataを再生成してください。

ブラウザが開いて認証も正しく行われるが、その後スクリプトが失敗する場合は、おそらくクッキーが原因ではありません。 例外処理 Selenium そこから先はより速いルートで、専用の Firefox プロフィール セッションデータをファイルに頼らずに保持したい場合、これが一般的な代替手段となります。

よくあるご質問

選択肢は2つあります。1つは、他の要素と同様に「同意する」ボタンをクリックする方法、もう1つは、ページを再読み込みする前にaddCookieを使ってサイトの同意クッキーを設定し、バナーが表示されないようにする方法です。後者の方法の方が高速で、最初の段階でよくある不具合の原因を取り除くことができます。

Python ドライバ自体では、スネークケースに相当する以下のメソッドを使用します。driver.get_cookies()、driver.get_cookie(name)、driver.add_cookie(dict)、driver.delete_all_cookies()。Cookie は Cookie オブジェクトではなく辞書として返されるため、角括弧で囲んだ値を読み取ってください。

はい。WebDriverは、ブラウザと直接ではなく、ドライバを介して通信します。 Javaスクリプトを使用すると、getCookies を介して HttpOnly クッキーを確認できます。Cookie オブジェクトに対して isHttpOnly と isSecure を呼び出すことで、これらのフラグを調べることができます。

AI 支援分析グループは、共通のシグナルによって失敗した実行をグループ化し、 tracセッション Cookie の有効期限切れや欠落が原因で、ログアウトが断続的に失敗することがあります。一部のツールは、実行時にどの Cookie が保持されているかを学習し、セッションがその基準から逸脱した場合に警告を発します。

GitHubコパイロット 読み取り、書き込み、復元ループは迅速に記述できますが、非推奨の新しい Boolean コンストラクタと新しい Date コンストラクタを頻繁に再現します。 Rev生成されたすべてのスニペットを現在の Java (NAIST) と Selenium API。

いいえ。セッションクッキーは有効な認証情報なので、コミットされた Cookies.data ファイルがあると、リポジトリへのアクセス権を持つ誰でもそのアカウントになりすますことができます。このファイルはバージョン管理から除外し、環境ごとに再生成してください。

デフォルトではそうではありません。各セッションはクリーンなブラウザプロファイルで開始されるため、クッキーがディスクに書き込まれて再利用されます。セッションを複数回実行しても維持するには、保存済みのブラウザプロファイルを添付する方法もあります。

セッションクッキーには有効期限タイムスタンプがあり、サーバーも tracks は独自のセッション有効期間を持ちます。どちらかの有効期限が切れると、再生された Cookie は拒否され、ログイン ページが返されるため、古いファイルを再利用するのではなく、保存されている Cookie を再生成してください。