TestNG Parallel Testing, Opens two browsers but runs all tests only in 1 browser

丶灬走出姿态 提交于 2021-01-29 05:11:31

问题


When I run this code, first it opens two Browsers ( Chrome ) and goes to the base URL. But here is the confusing part for me. When the browsers are open, out of these two browsers, only one browser will receive test commands. In my cases, I am running one class and this class has two test cases. but all of the test cases will run in one browser. 2nd browser just open and goes to the bases URL

BASE CLASS :

    package com.cross.base;
    import io.github.bonigarcia.wdm.WebDriverManager;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.edge.EdgeDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    import org.openqa.selenium.support.ui.WebDriverWait;
    import org.testng.annotations.Parameters;
    
    public class MultiThread_Class {
        public   static  WebDriverWait driverWait;
        protected static ThreadLocal<WebDriver> driverThreadLocal = new ThreadLocal <>();
    
        @Parameters({"browserName"})
        public synchronized ThreadLocal<WebDriver> setUP(String browserName) {
            if (browserName.equalsIgnoreCase("chrome")) {
                WebDriverManager.chromedriver().setup();
                driverThreadLocal.set(new ChromeDriver());
            } else if (browserName.equalsIgnoreCase("firefox")) {
                WebDriverManager.firefoxdriver().setup();
                driverThreadLocal.set(new FirefoxDriver());
            } else if (browserName.equalsIgnoreCase("edge")) {
                WebDriverManager.edgedriver().setup();
                driverThreadLocal.set(new EdgeDriver());
            } else if (browserName.equalsIgnoreCase("IE")) {
                WebDriverManager.iedriver().setup();
                driverThreadLocal.set(new InternetExplorerDriver());
            } else {
                System.out.println("Wrong Driver");
            }
driverWait = new WebDriverWait(getDriver(),15);
    
            return   driverThreadLocal;
        }
    
        public synchronized  WebDriver getDriver(){
            return driverThreadLocal.get();
        }
    
        public synchronized void browserclose(){
            getDriver().close();
        }
    }

TEST CLASS: Testing class with two cases

package Parallel_testing;


import com.cross.base.MultiThread_Class;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class CrossBrowserYouTube_test extends MultiThread_Class {
    @BeforeMethod
    @Parameters({"browserName"})
    public void browserLaunch(String browserName){
        setUP(browserName);
    }


   //@AfterMethod
    public void teardown(){
        browserclose();
    }

    @Test
    public void test1(){
        getDriver().get("https://www.youtube.com/");
        System.out.println("Test 1 Thread id is : " + Thread.currentThread().getId());
        driverWait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='search']"))).click();
        driverWait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='search']"))).sendKeys("Automation  ");
        driverWait.until(ExpectedConditions.elementToBeClickable(By.xpath("//yt-icon[@class='style-scope ytd-searchbox']"))).click();

    }

    @Test
    public void test2(){
        getDriver().get("https://www.youtube.com/");
        System.out.println("Test 2 Thread id is : " + Thread.currentThread().getId());
        driverWait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='search']"))).click();
        driverWait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='search']"))).sendKeys("  Testing");
        driverWait.until(ExpectedConditions.elementToBeClickable(By.xpath("//yt-icon[@class='style-scope ytd-searchbox']"))).click();

    }


}

XML FILE :- XML Test file

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite" parallel="methods" thread-count="12">

    <parameter name="browserName" value="chrome"/>
    <test verbose="2" preserve-order="true"  name="chrome">
        <classes>
            <class name="Parallel_testing.CrossBrowserYouTube_test">
                <methods>
                    <include name="test1"/>
                    <include name="test2"/>
                </methods>
            </class>
        </classes>
    </test>

</suite>

来源:https://stackoverflow.com/questions/65893972/testng-parallel-testing-opens-two-browsers-but-runs-all-tests-only-in-1-browser

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!