2

SeleniumWebDriverを介してWebナビゲーション/インタラクションを実行するPythonテストスイートを使用して、社内で開発されたアプリケーションをテストします。Webテストのトリッキーな部分は、アプリで一連のpdfレポートを処理することです。Firefoxのv3.6からv16.0.1への計画されたアップグレードをテストしていますが、firefoxの一時フォルダーのディレクトリ構造が変更されたため、以前にレポートをキャプチャした方法が機能しなくなったことがわかりました。元のPDFキャプチャコードは作成しませんでしたが、v16.0.1で使用するものに合わせてリファクタリングするので、PythonのセレンWebドライバーバインディングを使用してPDFを保存するより良い方法があるかどうか疑問に思いました。現在やっています。

以前は、Firefox v3.6の場合、レポートを生成するリンクをクリックした後、「C:\ Documents andSettings \\ LocalSettings \ Temp \ plugintmp」ディレクトリでPDFファイル(特定の命名規則)をスキャンして、生成されます。明確にするために、Webページ自体からレポートを保存するのではなく、FirefoxのTempフォルダーで生成されたレポートを使用しているだけです。

Firefox 16.0.1では、レポートを生成するリンクをクリックすると、ファイルが「C:\ Documents andSettings \ \ LocalSettings \ Temp \ tmp * \cache*」にランダムなファイル名で生成されます。 「.pdf」。これにより、前の方法と同様の手法を使用すると、このファイルのキャプチャがやや難しくなります。各ブラウザには、フォルダでいっぱいのキャッシュがあり、その中にランダムなファイル名でレポートが生成される、異なるtmp***フォルダがあります。 。

私が見ることができる最も簡単な解決策は、PDFを直接保存することですが、それを行う方法はまだ見つかりません。

FF3.6で使用したのと同じアプローチ(TempフォルダーディレクトリでPDFを検索)を使用するには、次のことを行う必要があると思います。

  1. この特定のブラウザーインスタンスに属するtmp***フォルダーを特定します(ブラウザーがインスタンス化される前後に存在するtmp ***フォルダーを検査できます)。
  2. そのブラウザのキャッシュ内で、PDFレポートが生成された直後に生成されたファイルを探します(タイムスタンプを比較することで可能です)
  3. キャッシュに複数のファイルが生成される場合、PDFがほぼ確実に最大の一時ファイルになるため、サイズに基づいて並べ替えて最大のファイルを取得することができます(ただし、これは不安定なようで、実際にテストする必要があります) 。

私はこのアプローチに満足しておらず、PDFファイルをキャプチャするためのより良い方法があるかどうか疑問に思っていました。誰かがより良いアプローチを提案できますか?

注:PDFファイルの実際のスクレイピングは引き続き正常に機能しています。

4

1 に答える 1

0

最終的には、テストの前にFirefoxのインターネット一時ファイルをクリアし、レポートの生成後に最後に作成されたファイルを探すことでこれを達成しました。

于 2013-02-07T20:47:44.940 に答える