ブログ内検索

プログラミング教材開発
大阪府高槻市原地区で肥料教室を開いています
検索キーワード:「selenium」
 

Selenium + php-webdriverでElementNotInteractableExceptionのエラーにハマった時の対処

/** Geminiが自動生成した概要 **/
Selenium + php-webdriver + Chromeのバージョンアップ後、`ElementNotInteractableException: element not interactable` エラーが発生。 環境は、Ubuntu 22.04.3 LTS, Selenium 4.13.0, php-webdriver 1.15.0, Chrome 117.0.5938.92, PHP 8.2.10, Apache 2.4.57。 エラーは `RemoteWebElement->sendKeys()` で発生し、 `<input type="text">` に文字列を入力する箇所で発生。 調査の結果、`<input>` の `type` が `hidden` になっていたことが原因。以前のバージョンでは強制的に実行されていたが、バージョンアップによりエラーになった。 `readonly` 属性を持つ `<input>` でも同様のエラーが発生する。

 

Selenium + php-webdriverでWebDriverCurlExceptionのエラーにハマった時の対処

/** Geminiが自動生成した概要 **/
Seleniumとphp-webdriverのバージョンアップ後にWebDriverCurlExceptionが発生した問題の解決策についての記事です。 ログイン・ログアウトを繰り返すテストコードで、三回目のログイン時にエラーが発生。調査の結果、セッションの破棄と再生成が必要であることが判明。php-webdriverのquitメソッドを用いてdriverを明示的にquitすることで解決しました。 記事では、エラー発生時の環境、テストコード、エラーメッセージ、解決策を詳細に記述しています。

 

メインの開発機をRaspberry Pi 4Bにしてみる

/** Geminiが自動生成した概要 **/
## プログラミング教育におけるARM+Debian+Pythonの可能性(要約) 記事は、高性能化・低価格化したRaspberry Piに代表されるARMデバイスが、プログラミング教育に最適であると主張しています。 その理由は以下の3点です。 1. **安価で入手しやすい:** Raspberry Piは数千円で入手でき、故障時のリスクも低い。 2. **DebianベースのOS:** 安定性・信頼性が高く、豊富なソフトウェアが利用可能。 3. **Pythonの標準搭載:** 初心者に優しく、実用的なプログラミング言語として人気が高い。 これらの要素により、ARMデバイスは教育現場におけるプログラミング学習のハードルを下げ、生徒の学習意欲向上に貢献できると結論付けています。

 

SOY Shopで概要欄設置プラグインを作成しました

/** Geminiが自動生成した概要 **/
SOY Shopユーザーからの要望を受け、管理画面に概要欄を設置するプラグインを開発しました。ユーザーは2名で、ほぼ同時期に要望がありました。管理画面左下に、簡易編集可能な概要欄を追加することで、ショップ運営に関する情報を手軽に共有できます。 以前開発したメモウィジェットではテキストリンクの自動クリックに対応できないため、今回のプラグインではリンクテキストを自動でアンカータグに変換する機能を追加しました。これにより、例えば新人研修用の資料へのリンクを概要欄に記載し、参照を促すことで教育コスト削減に繋がります。 プラグインはサイト(/soycms/soyshop/)でダウンロード可能なパッケージに含まれており、有効化することで利用可能です。UIは現状改善の余地がありますが、ご容赦ください。

 

php-webdriverでAceのコードエディタに文字を入力する

/** Geminiが自動生成した概要 **/
`executeScript`は、ChromeDriverでJavaScriptを実行するメソッドです。第一引数に実行するスクリプト、第二引数にオプションの引数配列を取ります。このメソッドは、ブラウザコンテキストでJavaScriptを実行し、その結果を返します。Aceエディタへの入力は、エディタオブジェクトの`setValue`メソッドをJavaScript経由で呼び出すことで実現できます。上記例では、`$script`に`setValue`呼び出しを定義し、`$html`をエディタに設定しています。`executeScript`の第二引数配列は、`$script`内の`arguments`オブジェクトにマッピングされます。これにより、PHPからJavaScript関数をパラメータ付きで実行できます。

 

php-webdriverでcontent-visibility:auto;を利用しているページのリンクをクリックする

/** Geminiが自動生成した概要 **/
php-webdriverで`content-visibility:auto;`を使用したサイトのリンクをクリックする際、遅延読み込みにより要素が見つからない問題が発生する。`getLocationOnScreenOnceScrolledIntoView()`だけでは不十分で、一度スクロール後にページトップに戻り、再度徐々にスクロールすることで要素を確実に表示させクリックを成功させる方法を紹介。これはページ表示速度の高速化と遅延読み込みによる影響への対策。また、SeleniumによるアクセスをGoogle Analyticsから除外する方法についても言及し、誤った計測を防ぐための設定についても触れている。さらに、関連するelement click interceptedエラーへの対処法の記事へのリンクも提供。

 

SOY CMSとSOY Shopの管理画面でメモウィジェットを設置しました

/** Geminiが自動生成した概要 **/
SOY CMS/Shopの管理画面左下にメモウィジェットが追加されました。これは、VPSサーバ運用時にphp.iniの変更(例: memory_limit)を忘れがちで、バージョンアップ後に問題が再発するのを防ぐためです。例えば、大量の商品注文で配列オーバーフローエラーが発生した場合、memory_limitを128Mから1024Mに変更するなどの対応が必要ですが、この設定を忘れやすいという問題がありました. このウィジェットにより、設定変更などをメモとして残せるようになりました。アップデート版はsaitodev.coからダウンロード可能です。

 

php-webdriverでelement click interceptedのエラーに対して

/** Geminiが自動生成した概要 **/
SeleniumとJenkins、php-webdriver、ヘッドレスChromiumでテスト自動化中に、メモウィジェットが原因でelement click interceptedエラーが発生。ヘッドレスモードで画面サイズが不足し、対象ボタンが隠れていたのが原因。ウィンドウサイズを`1024x2048`に設定することで一時的に解決したが、ページサイズに依存するこの方法は最適ではない。スクロールによる解決策も検討されたが、最終的にはCSSを修正し、メモウィジェットが他のボタンと重ならないように調整することで根本解決した。

 

Ubuntu19.10でSelenium + php-webdriverが動作しなかった時の対処

/** Geminiが自動生成した概要 **/
Ubuntu 19.10でSelenium + php-webdriverを用いたUIテスト自動化環境構築中に、「拡張機能の読み込みエラー」と「Chrome failed to start: exited abnormally」が発生。chromedriverのパスが意図せず`/usr/local/bin`に存在していたのが原因。`/usr/bin`に移動後、テストは正常に開始された。

 

Jenkins + ヘッドレスChromeでテスト自動化の省力化

/** Geminiが自動生成した概要 **/
JenkinsによるSOY CMS/Shopのテスト自動化で、ビルド時間が5時間超となり、Chromeのクラッシュが発生していた。メモリ使用量削減のため、ヘッドレスChromeを導入。php-webdriverのコードにChromeOptionsを追加することで、ヘッドレスChromeでのテスト実行が可能になった。仮想デスクトップ(Xvfb)も不要となり、メモリ使用量が削減され、格安VPSでの高負荷テスト継続に期待が持てる。

 

Go言語 + Selenium + Agoutiでテスト自動化

/** Geminiが自動生成した概要 **/
agoutiはGo言語用のAcceptanceテストフレームワークです。Selenium WebDriverをラップし、CSSセレクタを用いてページ要素にアクセス、操作できます。`agouti.ChromeDriver()`でChromeDriverを起動、`driver.NewPage()`で新しいページを開き、`page.Navigate()`で指定URLへ遷移します。`page.HTML()`でHTMLソースを取得、`page.FindByButton()`でボタン要素を見つけ、`btn.Submit()`でフォームを送信できます。`agouti.Browser("chrome")` でブラウザを指定可能です。 主にWebアプリケーションのUIテストを自動化するために使用され、ユーザー操作をシミュレートして期待通りの動作をするか検証できます。

 

Go言語 + Selenium + Agoutiで自動でGoogle検索

/** Geminiが自動生成した概要 **/
`agouti`はGo言語用のAcceptance Testingフレームワークで、ブラウザの自動操作を可能にします。`ChromeDriver()`でChromeドライバーを起動し、`NewPage()`で新しいページを開きます。`Navigate()`で指定URLへ遷移し、`FindByID()`や`FindByButton()`で要素を取得。`Fill()`でフォーム入力、`Submit()`でボタン押下など、ブラウザ操作をコードで表現できます。`godoc`にはAPIの詳細が記載されており、`Selection`インタフェースが要素操作の中核を担い、様々な操作メソッドを提供しています。エラー処理も組み込まれており、`err != nil`で各操作の成否を確認できます。

 

Go言語 + Selenium + Agoutiでブラウザ操作の自動化

/** Geminiが自動生成した概要 **/
Go言語でSeleniumとAgoutiを使ってChromeブラウザを自動操作する方法を解説しています。まずJavaとSelenium Serverをインストールし、起動確認を行います。次にChromeドライバーをインストールし、環境変数Pathにドライバのパスを追加します。Go言語のパッケージ管理ツールgo getでAgoutiパッケージを取得後、サンプルコードを作成・実行します。サンプルコードでは、AgoutiでChromeDriverを起動し、新しいページを開いてGoogleのトップページに遷移させる処理を行っています。実行結果として、Chromeブラウザが起動しGoogleのトップページが表示されます。

 

妻にプログラミングを教えることにした-前編

/** Geminiが自動生成した概要 **/
妻にプログラミングを教えるのは、SOY Shop開発への協力を期待しているからではなく、プログラミングを通して「相手に的確に指示を伝える能力」を身につけてほしいからだ。事務職希望者が多い一方、経営者側は事務作業をコストと捉える現状がある。プログラミングは、パソコンを部下に見立て、明確な指示を出す訓練となる。これは事務作業の効率化にも繋がる。また、電話での行き違いによる業務の非効率性を指摘し、プログラミング的思考で事前に情報を整理し伝えることの重要性を説く。最終的には、どんな業種でも発生する事務作業を効率化し、円滑なコミュニケーション能力を養うことが目的である。

 

php-webdriverでiframe内のリダイレクトに対応する

/** Geminiが自動生成した概要 **/
PHPのWebDriverを使って、SOY CMSのiframe内リダイレクトを含む操作を自動化する際、リダイレクト後に要素が見つからないエラーが発生した。iframe内でリダイレクトが発生する度にsleepを挟むことで解決。Seleniumはiframe内のリダイレクトを即座に認識できないため、sleepで待機時間を設ける必要がある。TinyMCE操作時と同様に、iframe操作ではリダイレクトの有無に関わらずsleepを挟むのが安定動作の鍵となる。

 

Jenkinsらをバージョンアップした後、エラーで動かなくなった時の対処

/** Geminiが自動生成した概要 **/
Jenkinsの動作が遅くなった場合、まずジョブの実行履歴を確認し、遅いジョブを特定します。次に、そのジョブの設定やビルド手順を見直し、不要な処理やリソースを消費する操作がないか確認します。 Jenkins自体の負荷が高い場合は、プラグインの無効化、古いビルドの削除、ディスク容量の確保などを行います。それでも改善しない場合は、Jenkinsの再起動や、リソースの増強を検討します。 パフォーマンス監視ツールを利用し、CPU、メモリ、ディスクI/Oなどを監視することで、ボトルネックの特定に役立ちます。

 

Jenkinsの動作が遅くなった時の対処

/** Geminiが自動生成した概要 **/
Jenkinsの動作が遅くなり、ビルドの失敗が増えたため調査したところ、ビルドログの蓄積が原因と判明。ログディレクトリ(/var/lib/jenkins/jobs/プロジェクト名/builds/)内の古いログを削除することでJenkinsの動作は改善された。 ログ問題の恒久的な解決策として、Discard Old Build pluginをインストール。プロジェクト設定のビルド後の処理で、ビルドログの保存数を10個に制限する設定を追加し、様子を見ることにした。

 

SOY Shopの管理画面の注文一覧ページで表示速度周りを改修しています

/** Geminiが自動生成した概要 **/
SOY Shopの管理画面、特に注文一覧ページの表示速度改善に取り組んでいます。月商数千万円規模のショップで顕著になる速度低下の原因となっていた、顧客名表示等の処理をDAO経由からSQL直書きに変更。顧客情報全体を取得する代わりに必要な名前だけをデータベースから取得することで、処理を効率化しました。他にも例外処理の見直しやテストコードによるエラー修正を行い、体感できる速度改善を実現。今後も処理速度の改善を継続し、最新版はサイトからダウンロード可能です。

 

さくらVPSにJenkinsを入れて、Selenium + php-webdriverを動かせるようにする

/** Geminiが自動生成した概要 **/
さくらVPS(Ubuntu 16.04)にJenkinsを導入し、Seleniumとphp-webdriverでUIテストを自動化する方法を紹介。Jenkinsインストール後、初期設定、ジョブ作成、Git連携、ビルドトリガー設定、シェルスクリプト実行設定、メール通知設定を行い、Apacheの設定を調整してテスト実行環境を構築。15分毎にGitリポジトリをポーリングし、変更があれば自動的にテストを実行、結果をメールで通知。これにより、月700円のVPS費用で継続的なUIテストを実現。

 

さくらVPS上でSeleniumとphp-webdriverを利用する

/** Geminiが自動生成した概要 **/
さくらVPS(Ubuntu 16.04)にSeleniumとphp-webdriverによるUIテスト環境を構築する方法。Selenium実行には仮想デスクトップ(Xvfb)とChromiumが必要で、手順はApache/PHP設定、Java8、Selenium、Xvfb、Chromium、ChromeDriverインストール、そしてSelenium起動スクリプト(load.sh)作成。load.shはXvfbとSeleniumを同時に起動し、ブラウザは仮想デスクトップ上で動作する。動作確認は http://(VPSのIPアドレス):4444 で行う。Jenkinsの設定とload.shの自動起動設定は今後の課題。

 

php-webdriverでtarget="_blank"付きのアンカータグ対策

/** Geminiが自動生成した概要 **/
php-webdriverで`target="_blank"`のリンクをクリックした際、新しいタブにフォーカスを移すには`$driver->switchTo()->window(end($driver->getWindowHandles()));`ではなく、`$wins = $driver->getWindowHandles(); $driver->switchTo()->window(end($wins));`のように書く。 また、テスト終了時に単に`close()`を使うとセッションが残ってしまうため、タブが一つの場合は`quit()`を使う必要がある。これを考慮した`close()`関数を定義することで、複数タブでも単一タブでも適切にブラウザを閉じ、テストを終了できる。

 

php-webdriverで任意のラジオボタンをチェックする

/** Geminiが自動生成した概要 **/
php-webdriverでラジオボタンを選択する方法について解説されています。id属性がある場合は`WebDriverBy::id()`で取得できますが、id属性がない場合は`WebDriverBy::xpath()`を使用します。xpathは複数の属性を指定して要素を取得でき、`//タグ名[@属性名='属性の値' and @属性名='属性値']`のように記述します。SOY CMSではラジオボタンにユニークなIDが自動付与されるため、xpathでの取得が推奨されています。

 

php-webdriverでSOY CMSにログインしてみる

/** Geminiが自動生成した概要 **/
php-webdriverを用いて、Selenium経由でSOY CMSにログインする手順を解説。ログイン画面で、ログインIDとパスワードの入力フィールドにそれぞれ「soycms」を入力後、ログインボタンをクリックしてログインするコードを紹介。`findElement`メソッドと`sendKeys`メソッドでフォームに値を入力し、`submit`メソッドでログインボタンをクリックすることでログイン処理を実現。ボタンもフォームも`findElement`で要素を取得し操作できることを示している。結果、SOY CMSの管理画面へログインできたことを確認。

 

php-webdriverで指定のフォームに値を入力してみる

/** Geminiが自動生成した概要 **/
Seleniumとphp-webdriverを使い、SOY CMSのログイン画面を自動操作するテストコードを実行した。ChromeドライバでChromiumを起動し、ログイン画面を表示後、ログインIDフォームに「soycms」と入力するコードを追加。実行結果、コンソールに「soycms」と表示され、Chromium上でもログインIDフォームに「soycms」が入力されていることを確認。基本的な動作確認が完了し、本格的なテストコード作成に移行する。

 

Seleniumとphp-webdriverでUIテストの自動化

/** Geminiが自動生成した概要 **/
Ubuntu 19.10のSnap版Chromiumでは、Seleniumのテスト自動化が実行できない場合があります。これは、Snapのセキュリティ制限により、SeleniumがChromiumを直接操作できないことが原因です。解決策は、ChromiumをSnap版ではなく、aptでインストールしたバージョンを使用することです。まず、`snap remove chromium`でSnap版を削除し、`sudo apt install chromium-browser`でapt版をインストールします。さらに、ChromeドライバーのバージョンとChromiumのバージョンが互換性があることを確認してください。これらの手順により、SeleniumはChromiumを正常に操作できるようになり、テスト自動化が実行可能になります。


Powered by SOY CMS   ↑トップへ