0

IE9 (およびその他の Windows ブラウザー) で JavaScript アプリをテストするために、VirtualBox WinVista VM を使用します。テスト ランナーとして、Karma を使用します。Karma github を通じて、IE9 を起動し、そのブラウザーでテスト ランナーを開始する bash スクリプトを見つけました。

これはほとんどの場合機能しますが、localStorage を使用する場合、「アクセスが拒否されました」というエラーが発生します。ただし、VM でブラウザを手動で起動すると、問題なく localStorage にアクセスできます。

VBoxManage guestcontrol コマンドを介してブラウザを起動すると、ブラウザがハードディスクの localStorage ディレクトリにアクセスできないようにするユーザー権限で何かが行われるようです。もちろん、VboxManage には同じユーザー アカウントを使用し、手動でブラウザーを実行しています。

Chrome でも同じ問題が発生しましたが、パブリック ディレクトリにリダイレクトできました。IE9 localstorage ディレクトリを指すレジストリ エントリを変更しようとしましたが、うまくいかないようです。

これを理解できない場合は、Selenium WebDriver を使用してテストを実行し、Karma の有用性を低下させる、以前のソリューションにフォールバックする必要があります。

4

1 に答える 1

0

私はほぼ完全に同じ問題を抱えていました(正確ではないにしても)。runas.exe を使用して IE を正しいユーザーとしてロードしようとして髪を抜いた後、localStorage の問題が修正されましたが、カルマが正しく接続できませんでした。

4.3 バージョンのゲストが追加された最新の VirtualBox (当時は 4.3) では、VBoxManage コマンドが正しいユーザーで IE をロードするため、localStorage へのアクセス権が付与されます。

シェルスクリプトで使用したコードは次のとおりです。

#!/bin/bash
CAPTUREURL=$1

VMNAME="IE9 - Win7"
LOGIN="IEUser"
PASSWORD="Passw0rd!"
SNAPSHOTNAME="Guest2"

VBoxManage snapshot "$VMNAME" restore "$SNAPSHOTNAME"

VBoxManage startvm "$VMNAME"

# Kill iexplore if it's already open
VBoxManage guestcontrol "$VMNAME" execute \
  --username "$LOGIN" \
  --password "$PASSWORD" \
  --image "C:\\Windows\\System32\\TaskKill.exe" \
  --verbose \
  --wait-stdout -- "/IM" "iexplore.exe" "/F"

# Wait for network to start up
sleep 10 # Can this be done in a better way?

VBoxManage guestcontrol "$VMNAME" execute \
  --username "$LOGIN" \
  --password "$PASSWORD" \
  --image "C:\\Program Files\\Internet Explorer\\iexplore.exe" \
  --verbose \
  -- "${CAPTUREURL/localhost/10.0.2.2}"

# Allow IE to boot up and connect before letting the script start
sleep 3

繰り返してより明確にするために、バージョン 4.3 より前の VBoxManage は、ローカルストレージに必要な権限を持たない間違ったユーザーでブラウザーをロードしていました。

于 2014-06-04T00:56:21.897 に答える