こんにちは私はこのエラーを見ています、助けてください
パラメータ「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();
}
パラメータを渡しています<parameter name="Visit" value="123456"/>
.xmlファイルで、TestNGクラスを直接実行します。したがって、コンパイル中にそのパラメータを取得しません。
したがって、xmlスイートを実行して、TestNGクラスに有効なパラメーターを提供する必要があります。
このクラスを直接実行しているため、このエラーが発生します。 TestNGXMLファイルを実行する必要があります。
あなたが従うことができるステップ:
テストスイートを実行します。
クラスを直接実行しようとしているように見えるため、その例外が表示されています。
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>
私でさえ同じ問題に直面していました問題は単純です..
以下の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 -->
メソッドに@Optional( "Abc")を追加する必要があります。これは、現在のパラメーターがオプションであることを指定します。 TestNGは、指定されたデフォルト値を渡します。何も指定されていない場合はnullを渡します。
Public void searchByVisit(@Optional( "Abc")String Visit)を実行してみてください)throws InterruptedException
XMLファイルの先頭に次の行を記載してください。
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
以下で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>
問題は中括弧の使用にあるようです。私は以下のスニペットで試しました:
@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テストを実行してみてください。これは私のために働いた