如何在Java中使用TestNG Selenium Webdriver在多个类中使用同一浏览器窗口?

阿迪尔·阿夫萨(Adil Afsar)

我正在尝试自动化具有登录名的网页,而登录后具有许多菜单项。我想以一种方式使其自动化,使其仅登录一次网页,然后使用不同的菜单项。每个新的菜单项自动化都在不同的类中创建。

package pack1;

public class Init {

    public WebDriver driver;

    ChromeOptions options;

    @BeforeSuite
    public void beforeSuite() throws AWTException, InterruptedException, IOException {
        //Setting Chrome Driver and disabling the save password option
        System.setProperty(“webdriver.chrome.driver”,”C:\\Users\\user\\Desktop\\Demo\\chromedriver.exe”);
        options = new ChromeOptions();
        Map<String, Object> prefs = new HashMap<String, Object>();
        prefs.put(“credentials_enable_service”, false);
        prefs.put(“profile.password_manager_enabled”, false);
        options.setExperimentalOption(“prefs”, prefs);
        driver=new ChromeDriver(options);

        //Opening the URL
        driver.get(“myURL”);
        driver.manage().window().maximize();

        //Login to the portal
        driver.findElement(By.xpath(“.//*[@id=’content-wrapper’]/div/div/div/div/div/div/div/form/div/div[1]/input”)).sendKeys(username);
        driver.findElement(By.xpath(“.//*[@id=’content-wrapper’]/div/div/div/div/div/div/div/form/div/div[2]/input”)).sendKeys(password);
        driver.findElement(By.xpath(“.//*[@id=’content-wrapper’]/div/div/div/div/div/div/div/form/div/div[3]/button”)).click();

    }

    @AfterSuite
    public void afterSuite() {
        //Closing the driver
        // driver.close();
    }
}

A级

    package pack1;

public class ClassA extends Init{

    @Test (priority=0, enabled = true)
    public void Setup() throws InterruptedException{
        //Traversing the menu to reach contract grower setup
        Thread.sleep(5000);
        driver.findElement(By.linkText(“Menu1”)).click();
        driver.findElement(By.linkText(“SubMenu1”)).click();

    }

}

B级

    package pack1;

public class ClassBextends Init{

    @Test (priority=0, enabled = true)
    public void Setup() throws InterruptedException{
        //Traversing the menu to reach contract grower setup
        Thread.sleep(5000);
        driver.findElement(By.linkText(“Menu2”)).click();
        driver.findElement(By.linkText(“SubMenu2”)).click();
    }

}

testing.xml

 <?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd”>
<suite name=”Suite”>
    <test name=”Test”>
        <classes>
            <class name=”pack1.ClassA”/>
            <class name=”pack1.ClassB”/>
            <class name=”pack1.Init”/>
        </classes>
    </test> <!– Test –>
</suite> <!– Suite –>
西吉尔

您应该进行以下更改:

  • WebDriverInit类中配置static
  • 不要继承Init测试类中的类
  • driver在测试类中使用,请以Init.getDriver();

基类

public class Init {

    private static WebDriver driver;

    public static WebDriver getDriver() {
        return driver;
    }

    @BeforeSuite
    public void beforeSuite() {
        System.out.println("BS");
        System.setProperty("webdriver.chrome.driver", "");
        driver = new ChromeDriver();
        driver.get("https://www.google.com");
    }

    @AfterSuite
    public void afterSuite() {
        System.out.println("AS");
        driver.quit();
    }
}

A级

public class ClassA {
    @Test(priority = 0, enabled = true)
    public void classATest() throws InterruptedException {
        System.out.println("classATest");
        Init.getDriver().findElement(By.name("q")).sendKeys("Class 1");
    }
}

B级

public class ClassB {
    @Test(priority = 0, enabled = true)
    public void class2Test() throws InterruptedException {
        System.out.println("classBTest");
        Init.getDriver().findElement(By.name("q")).sendKeys("Class 2");
    }
}

TestNG XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="System Testing" parallel="none" thread-count="1">
    <test name="MenuTest" verbose="0">
        <classes>
            <class name="com.pack1.ClassA" />
            <class name="com.pack1.ClassB" />
            <class name="com.pack1.Init" />
        </classes>
    </test>
</suite> 

输出量

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running TestSuite
BS
Starting ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) on port 16311
Only local connections are allowed.
Mar 09, 2018 2:33:59 PM org.openqa.selenium.remote.ProtocolHandshake.createSession
INFO: Detected dialect: OSS
classATest
classBTest
AS
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.541 sec - in TestSuite

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Selenium WebDriver中使用TestNg?

使用testng在一个浏览器中跨多个类运行Java Selenium Webdriver测试

如何在Python中使用Selenium在由不同WebDriver打开的不同Chrome浏览器窗口之间切换?

如何在testng for selenium中使浏览器的打开(在一个浏览器中全部测试)静态

使用Selenium Python和Firefox重新打开同一浏览器窗口

尝试使用带有 java 的 selenium webdriver 处理多个浏览器窗口时获取 java.util.NoSuchElementException

使用Selenium Python在同一浏览器中打开多个URL

如何使用Java调整Selenium WebDriver中当前浏览器窗口的大小?

如何使用Selenium WebDriver在同一浏览器的另一个选项卡上打开URL?

如何通过Selenium在Chrome浏览器中使用Tor

如何在Java中使用Selenium WebDriver向下滚动

如何在Selenium WebDriver Java中使用JavaScript

如何在Java中使用Selenium获取跨度类值

使用Java使用Selenium WebDriver捕获浏览器日志

在启动Selenium脚本之前,如何在浏览器的localStorage中使用ruby设置setItem

如何在python,selenium和chromedriver中使用Brave Web浏览器?

无法使用Selenium WebDriver在两个浏览器窗口之间切换

使用Selenium WebDriver Java绑定清除浏览器Cookies

是否可以使用Selenium Grid在同一浏览器(IE)上并行运行多个测试?

在Java中使用Selenium WebDriver

我可以在PHP中使用多个Selenium浏览器实例吗?

不能在公司修改的浏览器中使用Selenium

在Java中使用testNG和Selenium设置超时

如何在Java中使用Selenium WebDriver(Selenium 2)在文本框中输入内容?

无法使用 selenium webdriver 启动 Chrome 浏览器

使用Selenium WebDriver运行TOR浏览器

无法使用 Selenium Webdriver 启动 IE 浏览器

如何在Java中使用Selenium提交表单

如何在Java中使用Selenium执行内部滚动