1

我正在使用 TestNG 和 Selenium 来执行并行测试。这在 Firefox 和 Chrome 中效果很好,但在 IE 中会中断。我让网络驱动程序执行的步骤如下:

  1. 使用来自 testng.xml 的参数创建浏览器实例(见下文)
  2. 从测试用户凭据池中选择一个可用用户
  3. 用户已登录
  4. 测试继续

当 IE 启动它的实例时,它们都被分配了同一个用户。此外,所有实例似乎都在争夺哪一个拥有焦点。(相反,在 Firefox 和 Chrome 中,所有实例都被适当地分配了自己的用户,并且不会争夺焦点。)

因为每个 IE 实例都使用相同的用户凭据,所以我得到了测试冲突,并且因为它们争夺哪个实例具有焦点,所以由于 waitForElementPresent 命令,我得到了 Selenium TimeoutExceptions。

我的直觉是 IE 根本无法同时打开多个唯一实例。谁能证实我的怀疑或指导我如何解决这个问题?感谢您的帮助!!

作为参考,这是我的 testng.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="6" verbose="0" name="Command line suite" parallel="tests">

    <!-- IE Tests -->
    <test name="SourceBoxUIIe" preserve-order="true">
        <parameter name="browser" value="ie"/>
        <classes>
            <class name="org.familysearch.links.uitests.SourceBoxUITest"/>
        </classes>
    </test>
    <test name="EditPageIe" preserve-order="true">
        <parameter name="browser" value="ie"/>
        <classes>
            <class name="org.familysearch.links.uitests.EditPageUITest"/>
        </classes>
    </test>
    <test name="LinksGadgetPageIe" preserve-order="true">
        <parameter name="browser" value="ie"/>
        <classes>
            <class name="org.familysearch.links.uitests.LinksGadgetPageUITest"/>
        </classes>
    </test>
    <test name="AdminChangeLogIe" preserve-order="true">
        <parameter name="browser" value="ie"/>
        <classes>
            <class name="org.familysearch.links.uitests.AdminChangeLogPageUITest"/>
        </classes>
    </test>
    <test name="AttachedToPageIe" preserve-order="true">
        <parameter name="browser" value="ie"/>
        <classes>
            <class name="org.familysearch.links.uitests.AttachedToPageUITest"/>
        </classes>
    </test>
    <test name="ChangeLogIe" preserve-order="true">
        <parameter name="browser" value="ie"/>
        <classes>
            <class name="org.familysearch.links.uitests.ChangeLogUITest"/>
        </classes>
    </test>

    <!-- Firefox Tests Would Be here -->
    <!-- Chrome Tests Would Be Here-->

  <!-- Command line test -->
</suite> <!-- Command line suite -->
4

1 回答 1

2

你的预感几乎是正确的。根据维基

InternetExplorerDriver 的多个实例

通过创建 IEDriverServer.exe,应该可以同时创建和使用 InternetExplorerDriver 的多个实例。但是,此功能在很大程度上未经测试,并且可能存在 cookie、窗口焦点等问题。如果您尝试使用 IE 驱动程序的多个实例并遇到此类问题,请考虑使用 RemoteWebDriver 和虚拟机。

对于 InternetExplorer 的多个实例之间共享的 cookie(和另一个会话项)问题,有 2 个解决方案。

首先是以私有模式启动您的 InternetExplorer。之后,InternetExplorer 将以干净的会话数据启动,并且在退出时不会保存更改的会话数据。为此,您需要将 2 个特定功能传递给驱动程序:具有 true 值的 ie.forceCreateProcessApi 和具有 -private 值的 ie.browserCommandLineSwitches。请注意,它仅适用于 InternetExplorer 8 和更新版本,并且 Windows 注册表 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main 路径应包含值为 0 的键 TabProcGrowth。

第二个是在 InternetExplorer 启动期间清理会话。为此,您需要将具有真实值的特定 ie.ensureCleanSession 功能传递给驱动程序。这会清除所有正在运行的 InternetExplorer 实例的缓存,包括那些手动启动的实例。

于 2013-10-22T06:41:30.967 回答