如何使用 TestNg 和 eclipse 在其他浏览器完成后在多个浏览器中运行 Selenium webdriver 测试用例

2024-02-28

我想在所有多个浏览器中运行 selenium webdriver 测试用例但不是并行的是否可以在不使用xml和selenium网格的情况下在所有多个浏览器中运行测试用例。我们可以通过使用注释和java类来做到这一点。我希望我的测试用例应该首先在firefox中执行,然后在firefox中执行完成后应该在chrome中开始执行等等。

我已经尝试过这段代码,但使用 xml 并行执行。

CrossBrowserScript.java

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class CrossBrowserScript {

    WebDriver driver;

    /**
     * This function will execute before each Test tag in testng.xml
     * @param browser
     * @throws Exception
     */
    @BeforeTest
    @Parameters("browser")
    public void setup(String browser) throws Exception{
        //Check if parameter passed from TestNG is 'firefox'
        if(browser.equalsIgnoreCase("firefox")){
        //create firefox instance
            driver = new FirefoxDriver();
        }
        //Check if parameter passed as 'chrome'
        else if(browser.equalsIgnoreCase("chrome")){
            //set path to chromedriver.exe
            System.setProperty("webdriver.chrome.driver",".\\chromedriver.exe");
            //create chrome instance
            driver = new ChromeDriver();
        }
        //Check if parameter passed as 'IE'
                else if(browser.equalsIgnoreCase("ie")){
                    //set path to IE.exe
                    System.setProperty("webdriver.ie.driver",".\\IEDriverServer.exe");
                    //create IE instance
                    driver = new InternetExplorerDriver();
                }
        else{
            //If no browser passed throw exception
            throw new Exception("Browser is not correct");
        }
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }

    @Test
    public void testParameterWithXML() throws InterruptedException{
        driver.get("http://demo.guru99.com/V4/");
        //Find user name
        WebElement userName = driver.findElement(By.name("uid"));
        //Fill user name
        userName.sendKeys("guru99");
        //Find password
        WebElement password = driver.findElement(By.name("password"));
        //Fill password
        password.sendKeys("guru99");
    }
}

testngCrossBrowser.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite" thread-count="3"  parallel="tests" >
  <test name="ChromeTest">
  <parameter name="browser" value="Chrome" />
    <classes>
       <class name="parallelTest.CrossBrowserScript">
       </class>
    </classes>
  </test>
  <test name="FirefoxTest">
  <parameter name="browser" value="Firefox" />
    <classes>
       <class name="parallelTest.CrossBrowserScript">
       </class>
    </classes>
  </test>
  <test name="IETest">
  <parameter name="browser" value="IE" />
    <classes>
       <class name="parallelTest.CrossBrowserScript">
       </class>
    </classes>
  </test>
 </suite>

使用 JUnit,您可以创建 MethodRule (http://junit.org/apidocs/org/junit/rules/MethodRule.html http://junit.org/apidocs/org/junit/rules/MethodRule.html)这将在所有浏览器中运行测试。

Example:

public class ManyBrowsers implements MethodRule {

public static WebDriver driver;

@Override
public Statement apply(final Statement base, FrameworkMethod method, Object target) {
    return new Statement() {

        @Override
        public void evaluate() throws Throwable {
            //RUN FIREFOX
            driver = new FirefoxDriver();
            base.evaluate();
            driver.quit();

            //RUN CHROME
            File f = //PATH to CHROME DRIVER
            System.setProperty("webdriver.chrome.driver", f.getAbsolutePath());
            driver = new ChromeDriver();
            base.evaluate();
            driver.quit();
        }
    };
}

}

测试示例:

public class VisitGoogle {

@Rule
public ManyBrowsers browsers = new ManyBrowsers();

@Test
public void test() {
    ManyBrowsers.driver.navigate().to("https://www.google.com/");
}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 TestNg 和 eclipse 在其他浏览器完成后在多个浏览器中运行 Selenium webdriver 测试用例 的相关文章

随机推荐

  • 捕获无法处理的异常并重新加注

    这是我的问题的后续使用 SQLAlchemy 和多处理挂入 Python 脚本 https stackoverflow com questions 8785899 hang in python script using sqlalchemy
  • jquery 附加到列表的前面/顶部

    我有这个无序列表 ul li two li li three li ul 有没有办法可以将其添加到无序列表中 使其最终像这样 ul li ONE li li two li li three li ul 请注意 ONE 已添加到列表的前面 顶
  • 打开 ViewPager2 到特定位置而不滚动

    我已经用一些视频实现了回收视图 say 10 单击任何项 目都会打开一个viewpager2 which is on some other activity与所有物品and单击的一个 来自recyclerview 显示 之后 用户只能从那里
  • 是否可以让 Visual Studio 索引源代码以改进字符串搜索?

    我经常在 VS2008 中使用字符串搜索功能来构建整个解决方案 有没有办法通过让 VS2008 索引所有源代码和配置文件来提高其搜索速度 类似于 Google 桌面索引文件的方式 这增加了对 VS 解决方案中所有文件的即时全文搜索 不是免费
  • 设置 Gin 中未找到的路由

    我在 Gin 中设置了默认路由器和一些路由 router gin Default router POST users save router GET users getAll 但是我该如何处理 Gin 中找不到 404 路线呢 最初 我使用
  • 如何处理 JSF 中的动态角色或用户名更改?

    我有一个在 glassfish 2 1 上运行的 JSF 应用程序 具有 EJB 3 后端 对于身份验证 我使用自定义领域 用户使用他在注册时指定的电子邮件地址和密码进行身份验证 一切都运转良好 现在我有两个相关的问题 1 用户可以编辑他的
  • Xcode 4 Preview 2 是否足够稳定,可以用于开发?

    Xcode 4 Preview 2 是否足够稳定 可以用于开发 由于最终版本已经出来 这个线程可以忽略 从我最近看到的情况来看 它相当不稳定 在崩溃之前很难使用它超过几分钟 我当然不会在实际项目中使用它
  • 任务中重新抛出异常 (TPL) 丢失堆栈跟踪

    我有重新抛出异常的代码 当我后来从 task Exception 读取异常时 它的堆栈跟踪指向我重新抛出异常的位置 如我所料 第 n 行而不是第 m 行 为什么会这样呢 TPL 中的错误或更可能是我忽略的东西 当我解决方法时 我可以将异常包
  • Visual Studio Code - 按文件夹对待处理的更改进行分组

    由于某些受支持的扩展 我想摆脱当前的 IDE Jetbrains 并迁移到 Visual Studio Code VS Code 中我只缺少一件事 如果我在源代码管理中有多个文件作为待处理的更改 它们只会显示为平面列表 例如IntelliJ
  • swiftui 如何从详细信息到编辑视图获取核心数据值

    通过使用核心数据构建应用程序来学习 swiftui 陷入AddEdit的Detail到Edit的数据流向问题 从 AddEdit 到 List 以及从 List 到 Detail 的流程都可以 在网上搜索但没有找到有用的信息或者我不明白 这
  • 合并到特定提交

    我创建了一个名为newbranch来自mastergit 中的分支 现在我已经完成了一些工作并想要合并newbranch to master 但是 我做了一些额外的更改newbranch我想合并newbranch直到倒数第四次提交maste
  • 使用 watchOS2 中的 WatchConnectivity 在 iOS 和 WatchOS 之间发送消息

    我看了WWDC2015 看到现在可以在手表上开发原生应用了 这开启了很多功能 我想知道如何在我的 iOS 应用程序和 AppleWatch 应用程序之间发送数据 我看到有一个新的框架叫做WatchConnectivity 我如何使用它以及来
  • pandas 可以在视图或切片上使用替换方法来修改原始数据帧吗?

    我想替换数据框中的某些单元格值 如果它们在一个组内 但如果它们在其他组内则不替换 例如 我创建以下数据框 import pandas as pd df pd DataFrame a 2 3 b 2 3 a 3 3 columns 1st 2
  • Loopback4 中的事务支持吗?

    Loopback4如何支持事务 有没有类似的装饰器 比如 Transaction 我查看了这里的文档https loopback io doc en lb4 Repositories html https loopback io doc e
  • 等宽 Unicode 字体

    谁能告诉我涵盖大部分 unicode 字符的等宽字体吗 如果没有 那么包含大部分欧洲语言字符集的等宽字体 我也在寻找单一空间 丰富的 Unicode 字体 到目前为止 我使用 DejaVu Sans Mono 但我想知道是否有更好的 对我来
  • 当 applicationDidBecomeActive 被调用时如何告诉活动视图控制器?

    我觉得我在这里缺少一个技巧 我只想在调用 applicationDidBecomeActive 时在当前活动视图控制器上调用 viewDidLoad 或 viewDidAppear 这样当应用程序从后台再次启动时 我可以重置一些动画或其他内
  • 如何防止 Vuex 干扰我的类实例?

    我试图在 Vuex 中存储一个类的实例 EditorState https prosemirror net docs ref state EditorState来自散文镜 这个类从外部来看或多或少是不可变的 这意味着每当我想对其进行更改时
  • Bash 中使用“echo”变量覆盖文本问题

    我使用 OS X 10 6 5 Bash 当我运行这个时 echo IP echo of echo IPLINES 我得到这个输出 219 80 4 150 3128 of 1108 当我运行这个时 echo IP of IPLINES 我
  • App Engine 数据存储区 - 开发服务器限制

    我正在尝试测试 Google App Engine 数据存储数据库的效率 我想知道它查询大型数据集的速度有多快 总的来说 我的意思是大约 5 1000 万个同类实体 devserver 只允许我输入 1000 个同类实体 有办法提高这个限制
  • 如何使用 TestNg 和 eclipse 在其他浏览器完成后在多个浏览器中运行 Selenium webdriver 测试用例

    我想在所有多个浏览器中运行 selenium webdriver 测试用例但不是并行的是否可以在不使用xml和selenium网格的情况下在所有多个浏览器中运行测试用例 我们可以通过使用注释和java类来做到这一点 我希望我的测试用例应该首