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

当每个线程在TestNG、Cucumber和Selenide中使用多个浏览器并行执行测试时,如何获取浏览器名

法镜
2023-03-14

有没有办法使用Selenide获取每个运行线程的当前浏览器名称
我将TestNG Cucumber与多个浏览器集成<所以我需要知道@After hook上哪个浏览器正在运行测试<基于浏览器做一些事情。

    <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="TestSuite" thread-count="8" parallel="tests" >
    <test name="ChromeTest">
        <parameter name="browser" value="chrome" />
        <classes>
            <class name="com.site.runner.TestRunner">
            </class>
        </classes>
    </test>
    <test name="FirefoxTest">
        <parameter name="browser" value="firefox" />
        <classes>
            <class name="com.site.runner.TestRunner">
            </class>
        </classes>
    </test>
    <test name="SafariTest">
        <parameter name="browser" value="safari" />
        <classes>
            <class name="com.site.runner.TestRunner">
            </class>
        </classes>
    </test>
</suite>

硒化物设定驱动器

public static synchronized void setDriver(String browser) {
        setBrowser(browser);
    }

public String setBrowser(String browser){

        switch(browser){
            case "chrome":
                return setCapabilities(browser);
            case "firefox":
                return Configuration.browser = "firefox";
            case "edge":
                return Configuration.browser = "edge";
            default:
                return "No Browser found";
        }

public static void directToBrowserUrl(String browserUrl) {
        open(browserUrl);
    }

共有1个答案

龚承嗣
2023-03-14

@After方法中获取驱动程序的功能当前线程

代码:

 Capabilities capabilities = ((RemoteWebDriver) driver).getCapabilities();
    String browserName = capabilities.getBrowserName();
    String threadName = Thread.currentThread().getName();
    long threadId = Thread.currentThread().getId();
    
    System.out.println("Thread name & browser name: "+threadName +" --> "+browserName);
    System.out.println("Thread id & browser name: "+threadId +" --> "+browserName);

    if(browserName.equalsIngnoreCase("Chrome"){
     //do your stuff
    }

输出:

Thread name & browser name: com.CallerScript.Caller.main() --> chrome
Thread id & browser name: 16 --> chrome

 类似资料:
  • 我正在用cucumber和硒网络司机一起工作。我的测试工作与预期的组合。为了实现跨浏览器测试,我添加了TestNG框架。为了验证我的跨浏览器测试运行良好,我单独使用TestNG运行了它,没有使用cucumber。它在Chrome和火狐浏览器中都运行完美。 } 测试开始了。xml文件: 我需要将TestNG测试与Cucumber设置相集成,这样我就可以用Cucumber运行整个测试。为此,我将cuc

  • 问题内容: 我正在将Selenium WebDriver与Java和TestNG框架一起使用。我想一次在一个代码中使用Firefox,IE,Chrome来进行跨浏览器测试。我只能将Firefox初始化为 但无法以相同方式初始化其他浏览器。例如: 给出错误 给出错误 如何初始化IE和Chrome并在所有所需的浏览器中执行测试? 问题答案: 对于C# 加 创建一个包含浏览器名称的配置文件。实现与配置文

  • 我已经创建了一个测试套件,使用数据提供商数据工厂和我的TestNG文件发送浏览器详细信息作为参数。在testNG XML中,我调用我的数据工厂类。我也在使用浏览器堆栈进行测试(尽管我怀疑这与我遇到的问题有关) 当我不向testng文件添加parrelell=“true”时,测试运行没有任何问题。 我有一种感觉,这与每个浏览器使用的是同一个驱动程序有关,但我目前无法解决这个问题。 感谢您的指导。 这

  • 我试图在浏览器堆栈上运行多个浏览器上的E2E测试,我参考了在量角器中的多个/并行浏览器上的E2E测试?和Internet Explorer Selenium量角器e2e测试 但每次我试着运行测试时都会犯错- 谁能告诉我什么是我做错了这里,而且我们使用gulp ti运行规范,但我的问题是它是说,甚至没有超出认证。

  • 问题内容: 我有一种创建2个远程Web驱动程序的方法。一个带有chrome,另一个带有Firefox: Driver.cs 然后我有一个Test类: } 问题是当Driver.Intialize被调用时,它无法同时运行chrome和firefox。我要发生的是,调用Init方法时,它将启动两个浏览器并在每个浏览器中运行测试方法。 问题答案: 我目前使用NUnit的方式。我遇到了同样的问题,找不到使

  • 我有一个有很多功能的项目,我想在不同的浏览器中并行运行一个测试,使用cucumber jvm插件 在我的POM里。XML i添加了cucumber jvm和maver surefire两个插件 我创建runnerClass并添加: 现在,我无法运行测试,如何使用cucumber jvm或selenium网格并行运行浏览器中的不同功能