当前位置: 首页 > 知识库问答 >
问题:

使用Google Guice+TestNG+Selenium GRID+Maven并行运行测试时的多个浏览器

隆选
2023-03-14
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>

然而,测试的运行非常奇怪-->

    null

共有1个答案

常智勇
2023-03-14

谢谢你的回答。我终于明白了为什么我会有这些问题。如果有人需要答案-->我一直在每个测试类中为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# 加 创建一个包含浏览器名称的配置文件。实现与配置文