web-dev-qa-db-ja.com

パラメータは@Testで必要ですが、@ optionalとマークまたは定義されていません

こんにちは私はこのエラーを見ています、助けてください

パラメータ「Visit」は、メソッドsearchByVisitNoの@Testで必要ですが、@ Optionalとしてマークされていないか定義されていません。

Testng xmlファイルで定義されているときにオプションとしてマークする必要がある理由がわかりません

これが私が使用したコード全体です

<suite name="Suite" parallel="tests">
    <test name="SearchByVisit">
        <parameter name="Visit" value="123456"/>
        <classes>
            <class name="abc"/>
        </classes>
    </test>
</suite>

@Parameters({"Visit"})
@Test(priority=3)
public void searchByVisitNo(String VisitNumber)throws InterruptedException
{
    searchByVisit(VisitNumber);
}

public void searchByVisit(String Visit) throws InterruptedException
{
    WebDriverWait wait = new WebDriverWait(driver, 20);
    WebElement element = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.id("search-input"))
    );
    element.sendKeys(Visit);
    clickSearch();
}
4
dss

パラメータを渡しています<parameter name="Visit" value="123456"/> .xmlファイルで、TestNGクラスを直接実行します。したがって、コンパイル中にそのパラメータを取得しません。

したがって、xmlスイートを実行して、TestNGクラスに有効なパラメーターを提供する必要があります。

5
Ankur Singh

このクラスを直接実行しているため、このエラーが発生します。 TestNGXMLファイルを実行する必要があります。

あなたが従うことができるステップ:

  1. テストスイートを作成します。
  2. クラスとメソッド名を指定します(クラス名はpackageName.classNameである必要があります)
  3. メソッドに使用するパラメーターを指定します。
  4. テストスイートを実行します。

    クラスを直接実行しようとしているように見えるため、その例外が表示されています。

1
Monika

TestNG.xmlファイルでは、テストクラス名を指定する必要があり、クラス名では、パッケージとともにクラス名を指定する必要があります。それで問題は解決します!

以下の例を参考にしてください。

テストクラス名がTestclassで、パッケージcom.testpackageの下にある場合、testNG.xmlファイルは次のようになります。

<suite name="Suite" parallel="tests">
    <test name="Testclass">
        <parameter name="Visit" value="123456"/>
        <classes>
            <class name="com.testpackage.Testclass"/>
        </classes>
    </test>
</suite>
1
Jayasmita B

私でさえ同じ問題に直面していました問題は単純です..

  1. Testng XMLでは、day4ではなくday1コードでパラメーターを渡していました。
  2. これらのすべてのパラメーターを渡して、testngXMLのテストケースフォルダーを修正します

以下のDay1コードとDay4コード2があります。

Testng xmlでは、day1ではなくday4でパラメーターを渡すと、このエラーがスローされます。

1日目

package test2;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class Day1 {
@Parameters({"URL"}) //Only to Particular test method only
    @Test
    public void test11(String urlname)
    {
        System.out.println(urlname);
        System.out.println("Test case 11 in Day1");     
    }
    @Test
    public void test12()
    {
        System.out.println("Test case 12 in Day1");
    }
    @Test
    public void test13()
    {
        System.out.println("Test case 13 in Day1\n");
    }

}

4日目

package test2;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class Day4 {

@Parameters({"URL","API/username"})
    @Test
    public void test41(String urlname, String name)
    {
        System.out.println(urlname);
        System.out.println("Test case 41 in Day4");
        System.out.println(name);       
    }
    @Test
    public void test42()
    {
        System.out.println("Test case 42 in Day4");
    }

}

XMLエラー

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">

  <parameter name = "URL" value = "https://www.youtube.com"/>

 <**test name = "Day2Testcase">
   <parameter name = "URL" value = "day2test2.com"/>
   <parameter name = "API/username" value = "12345"/>** 

    <classes>
        <class name = "test2.Day1">
        </class> 
    </classes>

 </test>
  <test name = "Day4Testcase">
   <parameter name = "URL" value = "day4test2.com"/>
    <classes>
        <class name = "test2.Day4">
        </class> 
    </classes>   
 </test>

[〜#〜]エラー[〜#〜]

[Utils] [ERROR] [Error] org.testng.TestNGException:パラメーター 'API/username'はメソッドtest41の@Testで必要ですが、@ Optionalとマークされていないか、F:\ SeleniumWebDriverでJava -Rahul Shetty\Workspace\TestNG_Tutorial\testng.xmlによるAdvanced + Frameworksの基本

XMLを修正しました

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="Suite">

 <test name = "Day2Testcase">
   <parameter name = "URL" value = "day2test2.com"/>
    <classes>
        <class name = "test2.Day1">
        </class> 
    </classes>

 </test>
  <test name = "Day4Testcase">
   <parameter name = "URL" value = "day4test2.com"/>
   <parameter name = "username" value = "12345"/> 
    <classes>
        <class name = "test2.Day4">
        </class> 
    </classes>   
 </test>

</suite> <!-- Suite -->
1

メソッドに@Optional( "Abc")を追加する必要があります。これは、現在のパラメーターがオプションであることを指定します。 TestNGは、指定されたデフォルト値を渡します。何も指定されていない場合はnullを渡します。

Public void searchByVisit(@Optional( "Abc")String Visit)を実行してみてください)throws InterruptedException

0
Tejashree Kutte

XMLファイルの先頭に次の行を記載してください。

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

以下でpomを更新してみてください。以下をpomに追加して実行するだけです。依存関係タグのすぐ上に追加します。

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
        </plugin>
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
        </plugin>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.20.1</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>testng.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>
    </plugins>
</build>
0
Nitin Dubey

問題は中括弧の使用にあるようです。私は以下のスニペットで試しました:

@Parameters({"browser"})
@BeforeMethod
public void setUp(String browser){
    if(browser.equalsIgnoreCase("Mozilla Firefox")){
    driver = new FirefoxDriver();
}

以下のエラーが発生していました:

パラメータ '{browser}'はメソッドsetUpのBeforeMethodに必要ですが、@ Optionalとマークされていないか定義されていません

以下のように中括弧を削除した後、動作を開始しました。

@Parameters("browser")

Mavenリポジトリを使用していますか? pom.xmlをMavenクリーンとして実行してから、Mavenテストを実行してみてください。これは私のために働いた

0
SUPARNA SOMAN