0

我们使用 VirtualBox WinVista VM 在 IE9(和其他 Windows 浏览器)中测试我们的 JavaScript 应用程序。作为测试运行者,我们使用 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 问题,可惜它不允许 karma 正确连接。

事实证明,带有 4.3 版本来宾添加的最新 VirtualBox(当时是 4.3)使 VBoxManage 命令以正确的用户加载 IE,从而获得访问 localStorage 的权限。

我在 shell 脚本中使用的代码如下:

#!/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 回答