• /
  • EnglishEspañol日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は、参考として提供されています。

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、このページを参照してください。

問題を作成する

ランタイム アップグレード エラーのトラブルシューティング

重要

2024 年 8 月 26 日以降、パブリックまたはプライベートな場所でレガシー ランタイムを使用して新しいモニターを作成することはできなくなります。

2024 年 10 月 22 日をもって、コンテナ化された プライベートミニオン (1分間あたりの呼出し回数) バージョンと レガシー合成バージョンのサポートを終了します。 パブリックロケーションの場合は、ランタイム アップグレード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:オプションを使用してください。 オプションの名前のみを変更する必要があります。 クエリ文字列の内容を更新する必要はありません。

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を引き続き使用することを選択したお客様は、 コード例をモニターに貼り付けることができます。

Copyright © 2024 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.