重要
2024年8月26日以降、パブリックロケーションまたはプライベートロケーションでレガシーランタイムを使用して新しいモニターを作成することはできなくなります。 2024年10月22日をもって、コンテナ化されたプライベートミニオン(1分間あたりの呼出し回数)とレガシーsyntheticランタイムバージョンのサポートを終了します。
- パブリックロケーションの場合は、ランタイム アップグレードUI使用してモニターを最新のランタイムに更新します。
- プライベートロケーションの場合、モニターの低下を回避するために推奨する移行手順を確認してください。
Scripted Browser: 要素を操作しようとすると失敗する
古いランタイムで作成されたモニターをChrome 100 (またはそれ以降) のランタイムに対して検証する場合、Promise 処理の違いにより、ページ上の要素を見つけて操作するfindElementなどのメソッドが失敗する可能性があります。 モニターがレガシー ランタイムでは合格し、新しいランタイムでは失敗し、スクリーンショットに要素が存在する場合は、Promise 処理ロジックを改善する必要がある可能性があります。
Seleniumウェブの意見 Promise Manager と制御フローにより、Promise を管理せずに、レガシー ランタイムで一部の関数を順番に実行できるようになりました。 この機能はSeleniumウェブ意見 4.0 で削除され、ランタイムでは使用できなくなりました。 すべての非同期関数と Promise は、 awaitまたは.then Promise チェーンを使用して管理する必要があります。 これにより、スクリプト関数が期待どおりの順序で実行されるようになります。
たとえば、Promise マネージャーと制御フローにより、 $browser.get Promise を返し、Promise が正しく処理されていない場合でも、この部分的なスクリプトが正常に完了する可能性があります。
$browser.get('http://example.com');
$browser.findElement($driver.By.css('h1'));Chrome 100 (またはそれ以降) のランタイムでは、Promise を返すメソッドは、ステップを適切に順序付けるために await または.then構文を使用する必要があります。 より簡潔な構文と簡単な使用法のため、await の使用が推奨されますが、 .thenプロミス チェーンも引き続きサポートされています。
await $browser.get('http://example.com');
let el = await $browser.findElement($driver.By.css('h1'));スクリプト API: requestとの違い got
Node.js 10 以前のスクリプトAPIランタイムは、 request Node.js モジュールを使用して、 APIテストに使用できる $http オブジェクトを提供していました。
Node.js 16 以降のスクリプト API ランタイムでは、 requestではなくgotが使用されます。 request モジュールは 2020 年に廃止され、新しいAPIまたはbrowserベースのランタイムには含まれなくなります。 $httpオブジェクトは、 gotを利用して、基本的なユースケースに対する下位互換性を提供しながら、非推奨のモジュールの使用を回避しながら、カスタムのrequestのようなエクスペリエンスを提供します。 requestの高度な使用例はすべてサポートされているわけではありません。 スクリプトの例と変換ガイドが用意されています。
ヒント
$httpオブジェクトによって提供されるrequestのようなエクスペリエンスは、Node.js 16 以降のスクリプト化された API ランタイムでrequestを直接使用しようとするすべての顧客に対しても返されます。
スクリプト API: 予期しないトークン JSON.parse
応答本文の操作中にJSON.parse関数を使用しようとすると、Node.js 16 以降のランタイムを使用するスクリプト API モニターで予期しないトークン エラーが発生する可能性があります。content-type 応答ヘッダーがapplication/jsonの場合、 $httpオブジェクトによって返される応答本文は解析された JSON になります。JSON.parseを使用して応答本文を解析しようとする追加の呼び出しは、応答本文がすでに解析されているため、このエラーで失敗します。
コンテンツ タイプ応答ヘッダーがapplication/jsonでない場合、応答本文は自動的に解析されず、 JSON.parse関数を使用する必要があります。
スクリプトAPI: HEADまたは GET
HTTP HEADまたはGETリクエストにリクエスト本文を含めることはできません。 Node 10 以前のランタイムで使用されるrequestモジュールではこれが許可されていましたが、新しいランタイムではエラーが発生します。 いくつかの異なる設定によりエラーが発生する可能性がありますが、最も一般的な提案は次のとおりです。
- たとえ空であっても、リクエストに本文を含めないでください。
HEADまたはGETリクエストで不要なオプションは使用しないでください。json: true
スクリプト API: クエリ文字列 (qs) の違い
Node 10 以前のランタイムでは、書き込み文字列設定はqs:オプションを使用して渡されました。 Node 16 ランタイムの場合は、代わりにsearchParams:オプションを使用してください。 オプションの名前のみを変更する必要があります。 クエリ文字列の内容を更新する必要はありません。
スクリプト API: Cookie jar の違い
Node 10 以前のランタイムでは、オプションjar: trueを使用して、リクエスト間で Cookie を Cookie jar に保存できました。
Node 16 ランタイムでは、 tough-cookieモジュールを使用して Cookie jar を作成し、代わりにリクエストでその Cookie jar を参照する必要があります。 cookiesという名前のクッキージャーを作成した場合は、オプションで次のように参照します。 cookieJar: cookies
スクリプト API: フォームの違い
Node 10 以前のランタイムの$httpオブジェクトに使用されるrequestモジュールと、Node 16 ランタイムの$httpオブジェクトに使用されるgotモジュールの違いにより、API モニターのフォームを使用したリクエストで問題が発生する可能性があります。
その場合は、この部分的な例に示すように、 form-dataモジュールを使用してフォームを作成し、リクエストに含めてください。
const FormData = require('form-data');
let form = new FormData();form.set('fieldName1','value1');form.set('fieldName2','value2');
let req = { headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'multipart/form-data', }, body: form}UUID モジュールのバージョンの違い
Node 16 ランタイムには、更新されたrequire構文の使用を強制するuuidモジュールの新しいバージョンが含まれています。
Node 10以前: const uuid = require('uuid');
ノード 16 ( uuidv4の使用を想定): const { v4: uuidv4 } = require('uuid');
スクリプトbrowser : 非推奨の警告 ($browser および $driver
browserランタイムのバージョン 2.0.29 以降では、$browser および $driver の非推奨警告が削除されました。 パブリックロケーションを使用するときにこれらの警告は表示されなくなります。 プライベートプライベートロケーションの使用時にこれらの警告が表示される場合は、ノードbrowserランタイム イメージを更新してください。
スクリプトbrowser : waitForAndFindElement および waitForPendingRequests
waitForAndFindElementメソッドとwaitForPendingRequestsメソッドは、Chrome 72 以前のスクリプト化されたブラウザ ランタイムで提供される New Relic カスタム メソッドです。Chrome 100 以降のランタイムでは引き続き$driverおよび$browserで使用できますが、Selenium WebDriver 4.1 API を$seleniumおよび$webDriverで直接使用する場合は使用できません。この変更により、New Relic の Selenium WebDriver 実装が基本の Selenium WebDriver 実装とより適切に連携します。
新しいランタイムでwaitForAndFindElementまたはwaitForPendingRequestsを引き続き使用することを選択したお客様は、 コード例をモニターに貼り付けることができます。