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

org.testng.testngexception:无法用[class java.lang.string]注入@test注释方法

李辉
2023-03-14

无法用[class java.lang.String]注入@test注释方法[launchB].

For more information on native dependency injection please refer to http://testng.org/doc/documentation-main.html#native-dependency-injection
at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:244)
at org.testng.internal.Parameters.createParameters(Parameters.java:172)
at org.testng.internal.Parameters.createParameters(Parameters.java:458)
at org.testng.internal.Parameters.handleParameters(Parameters.java:569)
at org.testng.internal.Invoker.handleParameters(Invoker.java:1308)
at org.testng.internal.Invoker.createParameters(Invoker.java:1036)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1126)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at org.testng.TestRunner.privateRun(TestRunner.java:744)
at org.testng.TestRunner.run(TestRunner.java:602)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
at org.testng.SuiteRunner.run(SuiteRunner.java:289)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
at org.testng.TestNG.runSuites(TestNG.java:1144)
at org.testng.TestNG.run(TestNG.java:1115)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)

下面是代码:

    public class LaunchBrowser_2 {
WebDriver driver;
String browser = "IE";
@Test
public void launchB(String browser){

    System.setProperty("webdriver.gecko.driver", "D:\\geckodriver\\geckodriver.exe");
    System.setProperty("webdriver.chrome.driver", "D:\\Chromedriver\\chromedriver.exe");
    System.setProperty("webdriver.ie.driver", "D:\\IEDriver\\IEDriverServer.exe");

    if(browser.equals("Mozilla"))
        driver = new FirefoxDriver();
    else if (browser.equals("Chrome"))
        driver = new ChromeDriver();
    else if (browser.equals("IE")){
        DesiredCapabilities cap = DesiredCapabilities.internetExplorer();
        cap.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
        driver = new InternetExplorerDriver(cap);                               
    }
    driver.manage().window().maximize();
    //driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("http://www.rediff.com");        
}

共有1个答案

慕容聪
2023-03-14

当您定义launchB()方法时,您接受了一个参数String Browser。您只是不能从使用@test注释launchB()方法的同一个类提供字符串浏览器

解决方案是接受testng.xml中的参数String Browser。所以你必须做一些修改。删除/注释行字符串browser=“IE”;。将@parameters(“browser”)添加到@test注释的上方。接下来,将System.SetProperty行移动到相应的if()块中。最后,为了方便起见,将browser.equals()替换为browser.equalsignorecase。最后的代码块将如下所示:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class Q45523264_inject 
{
    WebDriver driver;
    @Parameters("browser")
    @Test
    public void launchB(String browser)
    {

        if(browser.equalsIgnoreCase("Mozilla"))
        {
        System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
        driver = new FirefoxDriver();
        }
        else if (browser.equalsIgnoreCase("Chrome"))
        {
        System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
        driver = new ChromeDriver();
        }
        else if (browser.equalsIgnoreCase("IE"))
        {
        System.setProperty("webdriver.ie.driver", "C:\\Utility\\BrowserDrivers\\IEDriverServer.exe");
        DesiredCapabilities cap = DesiredCapabilities.internetExplorer();
        cap.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
        driver = new InternetExplorerDriver(cap);                               
        }
        driver.get("http://www.rediff.com/");  

    }
}

现在,您必须通过convert to testNG转换您的程序。生成了testng.xml。接下来,您将从testng.xml中传递String Browser的参数。您必须从testng.xml中传递 (现在开始)或 (现在开始)的参数。您的testng.xml将如下所示:

<suite name="Suite">
  <test name="My Test">
  <parameter name="browser" value="Mozilla"/>
  <!-- <parameter name="browser" value="IE"/> -->
  <!-- <parameter name="browser" value="Chrome"/> -->
    <classes>
      <class name="demo.Q45523264_inject"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->
 类似资料:
  • 我正在为每个测试方法构建一个模块,该模块在测试方法开始执行之前侦听TestNG测试并执行某些操作。我只想知道测试(方法)何时开始执行,方法的名称和测试类的可选名称。 我成功地为testNG的调用程序调用编写了切入点。它成功了。 相反,我想知道的是,每个测试方法都用org注释。测试NG。注释。Test,我如何编写切入点来捕捉用org注释的每个测试方法的执行连接点。测试NG。注释。测试? 这是我的测试

  • 我已经在我的项目中实现了Hilt依赖项,但是当我需要构造函数的@inject注释时,它就不起作用了。基本上,当我试图手动导入它时,我发现javax中的inject文件夹是空的。因此该结构类似于javax.inject。之后,我什么也得不到,因为inject文件夹是空的。我试过重建和清洁他的项目。我也尝试过使缓存无效,但似乎没有任何效果。我怎么才能让这起作用? 依赖项列表 刀柄版本-2.37

  • 对于用@X注释的类中的方法或用@X注释的方法,我需要一个切入点。我还需要注释对象。如果类和方法都被注释,我更喜欢将方法注释作为参数。 我尝试了以下操作,这会产生“绑定不一致”的警告。(为什么不直接将其设置为null?) 以下内容创建了“穿过切入点中的“||”的参数x的不明确绑定”警告。(在我看来,这不一定有意义:为什么不绑定第一个短路评估?) 如果存在类和方法注释,则将前面的尝试拆分为两个,自然会

  • 我有一个Spring启动应用程序,我最近从v1.3.3. RELEASE升级到v1.4.2. RELEASE。 用于我在v1中的集成测试。3.3,我有一个豆子,我能够成功地监视它。我在运行测试时,配置文件,下面的被激活,而不是应用程序的。 我正在升级到v1。4.2.发布并希望使用spyBean注释模拟单个方法,而不依赖于概要文件。 我对我的测试方法做了以下改变,以尝试它- 然而,当我尝试上述方法时

  • 问题内容: 我的测试课: 我在行上得到一个空指针异常: 在精确的给出空指针异常 如何使Junit类中的beanObject字段自动装配成为可能,以便可以使用“ BeanClass”类中的方法? 从评论中复制: 用简单的术语来说.. beanClass是具有某些方法的接口..我用 注释标记了该beanClass。.banClass 是由具有方法实现的beanClassImpl类实现的。.我需要在我的

  • 我找到了一些答案:https://stackoverflow.com/a/21218921/2754014 关于依赖注入。没有任何注释,如,或。让我们假设此示例没有任何 XML 配置 的 bean (除了简单