您好我看到了这个错误,请帮忙
@Test在方法searchByVisitNo上需要参数'Visit',但尚未标记为@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();
}
答案 0 :(得分:3)
您正在.xml文件中传递参数<parameter name="Visit" value="123456"/>
并直接运行TestNG类。所以在编译时没有获得该参数。
因此,您需要运行xml套件以向TestNG类提供有效参数。
答案 1 :(得分:1)
您正在收到此错误,因为您正在直接运行此类。您应该运行TestNG XML文件。
您可以遵循的步骤:
运行测试套件。
看起来你正在直接尝试运行该类,因此它显示异常。
答案 2 :(得分:1)
即使我面临着同样的问题,问题也很简单..
考虑以下 Day1代码和Day4代码两个都存在
在Testng xml中,在day4而不是day1中传递参数将引发此错误
第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");
}
}
第四天
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>
错误
[实用程序] [错误] [错误] org.testng.TestNGException:参数 @Test在方法test41上需要“ API /用户名”,但具有 未被标记为@Optional或在F:\ Selenium WebDriver中用 Java-从基础到高级+框架by Rahul Shetty \ Workspace \ TestNG_Tutorial \ testng.xml
更正了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 -->
答案 3 :(得分:0)
似乎问题在于使用花括号。 我试过下面的片段:
@Parameters({"browser"})
@BeforeMethod
public void setUp(String browser){
if(browser.equalsIgnoreCase("Mozilla Firefox")){
driver = new FirefoxDriver();
}
收到以下错误:
参数&#39; {browser}&#39; BeforeMethod对方法setUp是必需的,但尚未标记为@Optional或已定义
在删除大括号后开始工作如下:
@Parameters("browser")
答案 4 :(得分: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>
答案 5 :(得分:0)
在XML文件开头的行下面提到:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
答案 6 :(得分:0)
您需要在方法中添加@Optional(“ Abc”),该方法指定当前参数为可选。 TestNG将传入指定的默认值,如果未指定默认值,则为null。
尝试执行公共无效searchByVisit(@Optional(“ Abc”)字符串访问)会抛出InterruptedException
答案 7 :(得分:0)
您是否正在使用Maven回购?尝试以Maven clean的方式运行pom.xml,然后进行Maven测试。这对我有用
答案 8 :(得分:0)
在您的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>
答案 9 :(得分:0)
我的错误是我将参数关键字传递为“ Parameter”(P-大写)
答案 10 :(得分:0)
所以,我在传递参数时遇到了同样的问题,所以我在函数参数中添加了 @Optional。
@Test(priority = 2)
@Parameters("myName")
public void LoginAccountProcess(@Optional("Abc")String name) throws
FileNotFoundException, IOException, InterruptedException {
System.out.println("Name of th login Id is ==>"+name);
WebDriver chromeDriverObj=reusableComp.getLoadDriver();
chromeDriverObj.get(reusableComp.getUrl());
答案 11 :(得分:0)
Step1:- 在 Testng.xml 中定义类名:“packagname.abc”
Step2:- 现在右键单击 testng.xml 并运行为-> TestNG Suite。
注意:如果您使用 Testng Test 命令直接运行 testng 类“abc.java”,它将不会从 testng.xml 中获取 pic 参数值,因此您必须运行testng.xml 而不是运行 testNG 类“abc.java”作为 TestNG 测试
答案 12 :(得分:-1)
打开浏览器后,未传递任何URL,并且最后显示错误消息:
“方法设置时,BeforeTest需要参数“浏览器”,但尚未将其标记为@Optional或已定义
在C:\Users\hassan.anwer\IdeaProjects\CRBTesting\testing.xml"