我搜索并阅读了几乎所有关于Selenium Grid的文章,并与testNG并行运行测试。但是,我仍然无法弄清楚我做错了什么。
使用页面对象模式我正在测试http://www.gmail.com。我使用Google Guice依赖注入为每个页面提供WebDriver,因为我在AbstractModule类中使用了@Provides注释:
public class GmailModule extends AbstractModule {
@Override
protected void configure() { ... }
String NODE_URL = "http://localhost:5555/wd/hub";
@Provides
WebDriver getRemoteDriver() throws MalformedURLException {
ThreadLocal<RemoteWebDriver> threadDriver = new ThreadLocal<RemoteWebDriver>();
DesiredCapabilities capability = new DesiredCapabilities();
capability.setBrowserName(DesiredCapabilities.firefox().getBrowserName());
capability.setCapability(FirefoxDriver.PROFILE, new File(ResourceExaminer.getValueFromExpDataMap("firefoxprofile")));
capability.setPlatform(Platform.XP);
RemoteWebDriver webDriver = new RemoteWebDriver(new URL(NODE_URL), capability);
threadDriver.set(webDriver);
return threadDriver.get();
}
}
所有页面都扩展了抽象页面,我通过驱动程序,然后只使用它。
public abstract class AbstractPage extends HTMLElements{
public WebDriver webDriver;
@Inject
public AbstractPage(WebDriver driver){
this.webDriver = driver;
PageFactory.initElements(new HtmlElementDecorator(webDriver), this);
}
}
然后所有测试都扩展了AbstractTestingClass,它提供了Google @Guice注释以注入第一页。 我使用以下cmd行来运行Selenium Grid的集线器和节点:
java -jar selenium-server-standalone-2.39.0.jar -role hub -hubConfig DefaultHub.json java -jar selenium-server-standalone-2.39.0.jar -role node -nodeConfig DefaultNode.json
在DefaultNode.json中我减少了maxSessions = 2和browserName = firefox
的数量我的测试套件包含以下内容
<suite name="PositiveTestSuite" parallel="classes" thread-count="2" verbose="2">
<test name="Attaching file">
<classes>
<class name="com.epam.seleniumtask.gmail.test.AttachingFilesTest"/>
</classes>
</test>
<test name="2nd">
<classes>
<class name="com.epam.seleniumtask.gmail.test.ChangeSignatureTest"/>
</classes>
</test>
<test name="3rd">
<classes>
<class name="com.epam.seleniumtask.gmail.test.CreateNewLabelTest"/>
</classes>
</test>
<test name="4th">
<classes>
<class name="com.epam.seleniumtask.gmail.test.DeletingMessagesTest"/>
</classes>
</test>
然而,测试运行非常奇怪 - &gt;
我的问题是 - 1)为什么即使我在Selenium Grid中限制它们的数量,我仍然有3个浏览器? 2)如何强制我的测试仅在2个浏览器中运行? 2次测试,2次测试?
请帮帮我。我会感激任何答案。
答案 0 :(得分:1)
感谢您的回答。 我终于明白了为什么我遇到这些问题。 如果有人需要答案 - &gt;我已经在每个测试类中为Google Guice注入了模块。因此,每次测试开始时都会初始化注入,因此新浏览器也已打开。
作为一种解决方案,我使用@Provides注入在Guice中使用延迟初始化。在每个@BeforeClass注释中,我都得到了提供者。这样的事情:
@Guice(modules = GmailModule.class)
public class ForwardTest extends AbstractTestingClass {
@Inject
Provider<SignInPage> providingSignInPage;
@BeforeClass
public void startUp(){
signInPage = providingSignInPage.get();
}
在singInPage中有一个RemoteWebDriver。 现在它对我来说很好。