我正在使用TestNG和Selenium来执行并行测试。这在Firefox和Chrome中运行良好,但在IE中有所突破。我执行Web驱动程序的步骤如下:
当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 -->
答案 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实例的缓存,包括那些手动启动的实例。