Java Selenium脚本使用TestNG注释失败
步骤: 1.在eclipse中,我创建了一个名为“ForSe”的新项目Java Selenium脚本使用TestNG注释失败,java,selenium,testng,Java,Selenium,Testng,步骤: 1.在eclipse中,我创建了一个名为“ForSe”的新项目 在“src”文件夹下→ '默认包“我创建了一个名为Login.java的类 我在这个类中的代码如下: public class Login_Valid { public static void main(String[] args) throws InterruptedException { System.setProperty("webdriver.chr
Login.java
的类public class Login_Valid {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver","*my path*");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("*URL of prject ForSe*");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.xpath("//*@id='email_address']")).sendKeys("*email address*");
driver.findElement(By.xpath("//*[@id='password']")).sendKeys("*Password*");
driver.findElement(By.xpath("//*[@id='login-form']/div[4]/button")).click();
}
}
以java应用程序运行时,脚本运行得非常好。
但是,当我对TestNG使用相同的脚本时,它会跳过/失败我的测试。
创建TestNG脚本所采取的步骤如下:
public class ForSe_TestCases
{
WebDriver driver;
String url = "*project's URL*";
@Test (priority = 0)
public void IO_login(WebDriver driver)
{
//ForSe test environment URL
driver.navigate().to(url);
//this is official email address of IO
driver.findElement(By.xpath("//*[@id='email_address']")).sendKeys("*email address*");
//this is password
driver.findElement(By.xpath("//*[@id='password']")).sendKeys("*Password*");
//click on submit button to login
driver.findElement(By.xpath("//*[@id='login-form']/div[4]/button")).click();
System.out.println("Login button pressed");
}
@BeforeTest
public void setup()
{
// Set property for Chrome
System.setProperty("webdriver.chrome.driver","*my path*");
WebDriver driver = new ChromeDriver();
//apply implicit wait
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//maximize window
driver.manage().window().maximize();
}
}
src
下为SE_TestCases.java创建一个名为的新包
public class ForSe_TestCases
{
WebDriver driver;
String url = "*project's URL*";
@Test (priority = 0)
public void IO_login(WebDriver driver)
{
//ForSe test environment URL
driver.navigate().to(url);
//this is official email address of IO
driver.findElement(By.xpath("//*[@id='email_address']")).sendKeys("*email address*");
//this is password
driver.findElement(By.xpath("//*[@id='password']")).sendKeys("*Password*");
//click on submit button to login
driver.findElement(By.xpath("//*[@id='login-form']/div[4]/button")).click();
System.out.println("Login button pressed");
}
@BeforeTest
public void setup()
{
// Set property for Chrome
System.setProperty("webdriver.chrome.driver","*my path*");
WebDriver driver = new ChromeDriver();
//apply implicit wait
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//maximize window
driver.manage().window().maximize();
}
}
runastestng运行测试时收到的错误消息
[Utils] [ERROR] [Error] org.testng.TestNGException:
Cannot inject @Test annotated Method [IO_login] with [interface org.openqa.selenium.WebDriver].
===============================================
Default test
Tests run: 1, Failures: 1, Skips: 0
===============================================
===============================================
Default suite
Total tests run: 1, Failures: 1, Skips: 0
===============================================
更改代码行下方的内容。
从public void IO\u登录(WebDriver驱动程序)
到public void IO\u登录()
然后试着运行你的代码,它肯定会对你有用。有关此代码的更多详细信息,请参阅以下代码
public class ForSe_TestCases {
WebDriver driver;
String url = "http://google.com";
@Test (priority = 0)
public void IO_login()
{
driver.navigate().to(url);
System.out.println("Login Method");
}
@BeforeTest
public void setup()
{
System.setProperty("webdriver.chrome.driver", "C:\\Drivers\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(25, TimeUnit.SECONDS);
}
}
这些可能是一些问题:
“我的路径”不是有效的变量名。将其更改为“我的路径”
定义一个字符串my_path=“C:\\Utility\\BrowserDrivers\\chromedriver.exe”代码>作为全局变量
提供System.setProperty(“webdriver.chrome.driver”、“my_path”)时检查变量代码>
不要使用driver.manage().window().maximize()代码>改为使用选项类处理它
WebDriver-driver
是在类级别全局定义的,您不必在IO\u login()中将其作为参数传递
检查此代码:
public class TestAnyURL_TestNG
{
WebDriver driver;
String url = "http://google.com";
String my_path = "C:\\Utility\\BrowserDrivers\\chromedriver.exe";
@Test (priority = 0)
public void IO_login()
{
//ForSe test environment URL
driver.navigate().to(url);
//this is official email address of IO
driver.findElement(By.xpath("//*[@id='email_address']")).sendKeys("*email address*");
//this is password
driver.findElement(By.xpath("//*[@id='password']")).sendKeys("*Password*");
//click on submit button to login
driver.findElement(By.xpath("//*[@id='login-form']/div[4]/button")).click();
System.out.println("Login button pressed");
}
@BeforeTest
public void setup()
{
System.setProperty("webdriver.chrome.driver", my_path);
ChromeOptions options = new ChromeOptions();
options.addArguments("test-type");
options.addArguments("start-maximized");
options.addArguments("--js-flags=--expose-gc");
options.addArguments("--enable-precise-memory-info");
options.addArguments("--disable-popup-blocking");
options.addArguments("--disable-default-apps");
options.addArguments("test-type=browser");
options.addArguments("disable-infobars");
driver = new ChromeDriver(options);
}
}
记住:
替换http://google.com
使用您自己的测试URL
将包演示
替换为包您的包名
将public class TestAnyURL\u TestNG替换为public class\u class\u name
作为“TestNG测试”运行
更新我的状态
请用下面的代码替换您的代码,然后再试一次,我在我的机器上测试了它
import org.testng.annotations.Test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeTest;
public class Testngtest
{
WebDriver driver;
String url = "*project's URL*";
@Test (priority = 0)
public void IO_login()
{
//ForSe test environment URL
driver.navigate().to("Url");
//this is official email address of IO
driver.findElement(By.xpath("//*[@id='email_address']")).sendKeys("*email address*");
//this is password
driver.findElement(By.xpath("//*[@id='password']")).sendKeys("*Password*");
//click on submit button to login
driver.findElement(By.xpath("//*[@id='login-form']/div[4]/button")).click();
System.out.println("Login button pressed");
}
@BeforeTest
public void setup()
{
// Set property for Chrome
System.setProperty("webdriver.chrome.driver","*my path*");
driver = new ChromeDriver();
//apply implicit wait
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//maximize window
driver.manage().window().maximize();
}
}
下面是我对原始代码所做的更改
1.删除IO_登录方法()的驱动程序参数
2.再次删除了setup方法中的web驱动程序声明,我们已经在类内部和所有方法外部声明了它
如果您有任何疑问,请告诉我。问题在于TestNG的设置。以下代码解决了我的问题:
@BeforeTest
public void setup()
{
System.setProperty("webdriver.chrome.driver", my_path);
ChromeOptions options = new ChromeOptions();
options.addArguments("test-type");
options.addArguments("start-maximized");
options.addArguments("--js-flags=--expose-gc");
options.addArguments("--enable-precise-memory-info");
options.addArguments("--disable-popup-blocking");
options.addArguments("--disable-default-apps");
options.addArguments("test-type=browser");
options.addArguments("disable-infobars");
driver = new ChromeDriver(options);
}
对试过了,但结果还是一样。它打开浏览器将URL数据;()
并立即失败。当我执行上述代码时,它工作正常,没有显示任何错误。我猜在你的情况下,你的chrome驱动程序被破坏了。从这个站点下载最新的chrome驱动程序,然后执行我的代码。我尝试了最新的chrome驱动程序。还是不行。我确信它不是chrome驱动程序,因为当我以java应用程序运行时,脚本工作正常。你是否正确地替换了我的代码?您使用的是哪个版本的selenium webdriver?chrome浏览器版本?请传递您的错误消息。您能解释一下为什么我不使用driver.manage().window().maximize()如果我在脚本中使用这行代码,我想知道影响。