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网格的集线器和节点:
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>
然而,测试的运行非常奇怪-->
谢谢你的回答。我终于明白了为什么我会有这些问题。如果有人需要答案-->我一直在每个测试类中为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。现在对我很管用。
我已经创建了一个测试套件,使用数据提供商数据工厂和我的TestNG文件发送浏览器详细信息作为参数。在testNG XML中,我调用我的数据工厂类。我也在使用浏览器堆栈进行测试(尽管我怀疑这与我遇到的问题有关) 当我不向testng文件添加parrelell=“true”时,测试运行没有任何问题。 我有一种感觉,这与每个浏览器使用的是同一个驱动程序有关,但我目前无法解决这个问题。 感谢您的指导。 这
需要一些帮助来获得并行运行testng测试用例的正确方法。
我试图用TestNG并行运行一个示例测试项目。但它是在一个线程中顺序执行的。我漏掉什么了吗? 谢了。
我正在尝试使用2个xml文件与Maven并行运行我的测试,但似乎不起作用。我已经尝试了Maven留档中的步骤/参数:http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html 以下是我的pom.xml文件: 这是功能1.xml文件: 我应该做哪些参数/更改才能使其生效? 谢谢你
问题内容: 我有一种创建2个远程Web驱动程序的方法。一个带有chrome,另一个带有Firefox: Driver.cs 然后我有一个Test类: } 问题是当Driver.Intialize被调用时,它无法同时运行chrome和firefox。我要发生的是,调用Init方法时,它将启动两个浏览器并在每个浏览器中运行测试方法。 问题答案: 我目前使用NUnit的方式。我遇到了同样的问题,找不到使
我正在探索硒网格,用于在多个浏览器上执行测试。我已经按照在线教程配置了集线器和节点。我已经创建了一个测试脚本。 这是测试脚本的代码: 我的目标是在多个浏览器上运行此测试,我已经添加了所需的功能,如火狐, 感谢任何帮助
有没有办法使用Selenide获取每个运行线程的当前浏览器名称 我将TestNG Cucumber与多个浏览器集成<所以我需要知道@After hook上哪个浏览器正在运行测试<基于浏览器做一些事情。 硒化物设定驱动器
问题内容: 我正在将Selenium WebDriver与Java和TestNG框架一起使用。我想一次在一个代码中使用Firefox,IE,Chrome来进行跨浏览器测试。我只能将Firefox初始化为 但无法以相同方式初始化其他浏览器。例如: 给出错误 给出错误 如何初始化IE和Chrome并在所有所需的浏览器中执行测试? 问题答案: 对于C# 加 创建一个包含浏览器名称的配置文件。实现与配置文