TestNG和Selenium-IE无法启动独立线程

时间:2013-10-21 20:30:11

标签: internet-explorer selenium parallel-processing webdriver testng

我正在使用TestNG和Selenium来执行并行测试。这在Firefox和Chrome中运行良好,但在IE中有所突破。我执行Web驱动程序的步骤如下:

  1. 使用testng.xml(见下文)
  2. 中的参数创建浏览器实例
  3. 从测试用户凭据池中选择可用用户
  4. 用户已登录
  5. 测试继续
  6. 当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 -->
    

1 个答案:

答案 0 :(得分:2)

你的预感几乎是正确的。根据{{​​3}}:

InternetExplorerDriver的多个实例

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

InternetExplorer的多个实例之间共享的cookie(和另一个会话项)有两个解决方案。

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

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