我在使用 testNg 和 xml 文件在 selenium java 中启动浏览器时遇到了一些问题。当没有"驱动程序=新的ChromeDriver((;"时,代码似乎工作正常,我正在附加到目前为止我拥有的所有内容
所以她是我的班级档案
package corssBrowsers;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class VerifyTitle {
WebDriver driver;
@Test(priority=1)
public void sam() {
System.out.println("Hello sam");
}
@Test(priority = 2)
@Parameters({"browser"})
public void browsers(String browsername) {
System.out.println(browsername);
if(browsername.equalsIgnoreCase("chrome")) {
System.out.println("You have selected " + browsername);
System.setProperty("webdriver.chrome.driver",
System.getProperty("user.dir") + "\Drivers\Windows\chromedriver.exe");
driver = new ChromeDriver();
}
else {
System.out.println("You have not selected chrome");
}
driver.manage().window().maximize();
driver.get("www.yahoo.com");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
}
我的测试.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
<test name="Test">
<parameter name="browser" value="chrome"/>
<classes>
<class name="corssBrowsers.VerifyTitle"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
当我运行测试表单时,我不断得到 xml :
[RemoteTestNG] detected TestNG version 6.14.2
Hello sam
chrome
You have selected chrome
Starting ChromeDriver 2.36.540470 (e522d04694c7ebea4ba8821272dbef4f9b818c91)
on port 13932
Only local connections are allowed.
===============================================
Suite
Total tests run: 2, Failures: 1, Skips: 0
===============================================
当我从类文件中运行时,我得到:
PASSED: sam
FAILED: browsers
org.testng.TestNGException:
Parameter 'browser' is required by @Test on method browsers but has not been
marked @Optional or defined
在这两种情况下,即使代码正确,chrome 浏览器也不会启动(在我所做的其他测试中工作正常(。那么,我做错了什么?
浏览器方法有参数,这个参数在TestNG XML.So 中定义,如果你在类级别运行测试,那么系统将不会获得浏览器名称,并且会抛出错误。您可以在参数中添加可选标记,如果未在testng xml中指定值,或者如果您在类级别运行,则可选注释值将作为默认值。
您需要修改代码,如下所示
public void browsers(@Optional("chrome") String browsername) {
System.out.println(browsername);
您必须为 browsername 参数添加默认值,让我们一起考虑一下。 您在浏览器的 xml 运行器文件中添加了一个参数,当您运行该文件时,该参数将传递到您声明@Parameters的@Test。 现在,如果您自己运行测试类,则该值不会从xml文件传递给@Test,因为没有启动您需要作为TestNG运行器运行的文件。
请添加这样的默认值作为参数:
@Test(priority = 2)
@Parameters({"browser"})
public void browsers(@Optional("chrome") String browsername){
System.out.println(browsername);
if(browsername.equalsIgnoreCase("chrome")) {
System.out.println("You have selected " + browsername);
System.setProperty("webdriver.chrome.driver",
System.getProperty("user.dir") + "\Drivers\Windows\chromedriver.exe");
driver = new ChromeDriver();
}
else {
System.out.println("You have not selected chrome");
}
driver.manage().window().maximize();
driver.get("www.yahoo.com");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
最后一点,尝试使用 TestNG 注释进行设置配置。我建议使用@BeforClass来创建驱动程序。