Selenium TestNG:方法需要2个参数,但@Test注释中提供了0

Selenium TestNG:方法需要2个参数,但@Test注释中提供了0,selenium,selenium-webdriver,testng,Selenium,Selenium Webdriver,Testng,我是硒测试的新手。 基本上, 我有一个selenium类,如: import org.testng.annotations.Test; import org.testng.annotations.Test; import org.testng.annotations.DataProvider; import org.testng.annotations.Parameters; import org.testng.annotations.Test; import org.testng.annota

我是硒测试的新手。 基本上, 我有一个selenium类,如:

import org.testng.annotations.Test;
import org.testng.annotations.Test;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import org.testng.annotations.Test;
import com.google.common.base.Function;

import java.awt.AWTException;
import java.awt.Robot;

import org.openqa.selenium.By;
import org.openqa.selenium.Point;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;
import org.testng.annotations.Test;
import org.openqa.selenium.firefox.FirefoxDriver;

public class SeleniumTests {

    public void commonFunction(){
        System.setProperty("webdriver.chrome.driver", "C://Downloads//chromedriver_win32//chromedriver.exe");
        WebDriver driver  = new ChromeDriver();
        Actions builder = new Actions(driver);
        driver.get("http://localhost:3000");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        test1(driver,builder);
    }
    //The driver,builder will be used by all the below 3 test functions.

    /**
     * Calling the Most Visited API -- TEST1
     */
    public void test1(WebDriver driver,Actions builder){
        WebElement most_visited_link = driver.findElement(By.id("mostVisited"));
        Thread.sleep(2000);

        Action mouseOvermost_visited_link = builder.moveToElement(most_visited_link).build();
        mouseOvermost_visited_link.perform(); 
        Thread.sleep(2000);
        driver.findElement(By.id("mostVisited")).click();
        Thread.sleep(1000);
        WebElement most_Visited_button = driver.findElement(By.id("datePicked"));
        Action mouse_most_VisitedOverDatePicker = builder.moveToElement(most_Visited_button).build();
        mouse_most_VisitedOverDatePicker.perform(); 
        Thread.sleep(2000);
        driver.findElement(By.id("datePicked")).click();
        Thread.sleep(2000);

        driver.findElement(By.linkText("6")).click();
        Thread.sleep(5000);
        test2(driver,builder);
    }

    /**
     * Calling the Status Pie API  -- TEST2
     * @param builder 
     * @param driver 
     */
    public void test2(WebDriver driver,Actions builder){
        WebElement status_pie_link = driver.findElement(By.id("statusPie"));
        Thread.sleep(2000);
        //Actions builder = new Actions(driver);
        Action mouseOverStatusPie = builder.moveToElement(status_pie_link).build();
        mouseOverStatusPie.perform(); 
        Thread.sleep(1000);
        driver.findElement(By.id("statusPie")).click();
        Thread.sleep(1000);

        WebElement status_pie_button = driver.findElement(By.id("datePicked"));
        Action mouseOver_Status_pie_DatePicker = builder.moveToElement(status_pie_button).build();
        mouseOver_Status_pie_DatePicker.perform(); 
        Thread.sleep(2000);
        driver.findElement(By.id("datePicked")).click();
        Thread.sleep(2000);
        driver.findElement(By.linkText("6")).click();
        Thread.sleep(5000);
        test3(driver,builder);
    }

    /**
     * Calling the Old Data API -- TEST3
     */
    public void test2(WebDriver driver,Actions builder){
        WebElement old_data_link = driver.findElement(By.id("oldData"));
        Thread.sleep(2000);
        // Actions builder = new Actions(driver);
        Action mouseOverOldData = builder.moveToElement(old_data_link).build();
        mouseOverOldData.perform(); 
        Thread.sleep(2000);
        driver.findElement(By.id("oldData")).click();
        Thread.sleep(1000);

        WebElement old_data_button = driver.findElement(By.id("datePicked"));
        Action mouseOverDatePicker = builder.moveToElement(old_data_button).build();
        mouseOverDatePicker.perform(); 
        Thread.sleep(2000);
        driver.findElement(By.id("datePicked")).click();
        Thread.sleep(2000);
        driver.findElement(By.linkText("6")).click();
        Thread.sleep(5000);
        driver.quit();
    }

}
该代码在浏览器上按预期执行,并关闭chrome窗口。 但是,在索引报告中,我看到日志为:

3 methods, 2 skipped, 1 passed 
Skipped methods :    
 mostVisitedfunction   
 statuspiefunction   

Passed methods :    
 createConnection  
知道我哪里出错了吗?
提前感谢。

方法mostVisitedfunction不应该有注释,因为它是yoyr测试用例的帮助方法。而是创建一个新类,在@test类中创建一个相同的对象,然后调用该方法

请参见下面的示例

我的测试是

//MAximize the Screen
    driver.manage().window().maximize(); 
//Go to Gmail Login Page
    SignInPage SignInPage = WebUtils.GoToSignInPage(driver);
//Sign in to Login page -Send Username 
    SignInPage.SendkeysMethodForSignInPAge(driver, By.cssSelector("input[id='Email']") , "kishanpatelllll.8@gmail.com" );
//Click on Next
    SignInPage.ClickToLogin(driver, By.cssSelector("input[id='next']"));
//Wait for password field to be visible
    SignInPage.WaitForElementTobeVisible(driver, By.cssSelector("input[id='Passwd'][type='password']"));
因此,当我调用sendKeysMethodForSigningPage方法时,我不会在@Test中编写它

请参阅SendKeysMethod以了解SigningPage方法: 公共类签名页{

public void SendkeysMethodForSignInPAge(WebDriver driver, By by, String s) {
    WebUtils.Sendkeys(driver,by,s);
}
我创建了一个新类,并在那里定义了它。 这是基本流程。 希望你能联系到这一点。 回答我,如果你仍然被卡住。
愉快学习:-)

方法mostVisitedfunction不应该有注释,因为它是yoyr测试用例的帮助方法。相反,创建一个新类,在@test类中创建一个相同的对象,然后调用该方法

请参见下面的示例

我的测试是

//MAximize the Screen
    driver.manage().window().maximize(); 
//Go to Gmail Login Page
    SignInPage SignInPage = WebUtils.GoToSignInPage(driver);
//Sign in to Login page -Send Username 
    SignInPage.SendkeysMethodForSignInPAge(driver, By.cssSelector("input[id='Email']") , "kishanpatelllll.8@gmail.com" );
//Click on Next
    SignInPage.ClickToLogin(driver, By.cssSelector("input[id='next']"));
//Wait for password field to be visible
    SignInPage.WaitForElementTobeVisible(driver, By.cssSelector("input[id='Passwd'][type='password']"));
因此,当我调用sendKeysMethodForSigningPage方法时,我不会在@Test中编写它

请参阅SendKeysMethod以了解SigningPage方法: 公共类签名页{

public void SendkeysMethodForSignInPAge(WebDriver driver, By by, String s) {
    WebUtils.Sendkeys(driver,by,s);
}
我创建了一个新类,并在那里定义了它。 这是基本流程。 希望你能联系到这一点。 回答我,如果你仍然被卡住。
愉快学习:-)

错误是因为如果@Test注释的方法中有参数,那么这些参数需要来自@parameters或@DataProvider。否则,如果注释都不提供参数(这是您的情况),则抛出错误


除此之外,@Kishan在代码结构方面的建议是正确的。您需要区分测试和常用函数。

错误的原因是,如果@Test注释的方法中有参数,那么这些参数需要来自@parameters或@DataProvider。否则,如果没有注释提供参数uments,这是您的情况,然后抛出错误

@Test 
public void assertBackToLogin(WebDriver driver) throws InterruptedException {
    LoginPage login = new  LoginPage (driver); 
    login.assertLogin();
}
除此之外,@Kishan在代码结构方面的建议是正确的。您需要区分测试和常用函数

@Test 
public void assertBackToLogin(WebDriver driver) throws InterruptedException {
    LoginPage login = new  LoginPage (driver); 
    login.assertLogin();
}
不工作

删除所有参数运行

@Test 
public void assertBackToLogin() throws InterruptedException {
    LoginPage login = new  LoginPage (driver); 
    login.assertLogin();
}
不工作

删除所有参数运行

@Test 
public void assertBackToLogin() throws InterruptedException {
    LoginPage login = new  LoginPage (driver); 
    login.assertLogin();
}

嗨,Kishan,谢谢你的帮助和关心。作为selenium的新手,我真的无法理解我的基本方法和测试方法如何工作。我已经编辑并更新了我的src代码。你能根据我的代码帮助我吗。谢谢。你为什么到处使用操作?请看你的链接是本地主机,所以我无法运行它在eclipse上并解决您的问题。您不需要使用操作来单击。您只需转到Webelement并执行click by clickmethod。现在您可能会提出这样一个问题,即我在哪里可以使用操作?因此操作用于,例如,有一些悬停会导致更多可单击的选项。因此,我们可以使用action.movetoelement(element.buil().perform());希望你能理解我。如果没有,那么告诉我,我将分享一段代码,这将使我能够轻松地讲述如何用selenium编写测试用例。学习愉快:-)Hi Kishan,感谢你的帮助和关注。作为selenium的新手,我真的无法理解我的基本方法和测试方法将如何工作。我已经编辑并更新了ed我的src代码。你能根据我的代码帮助我吗。谢谢。你为什么到处使用操作?你的链接是一个本地主机,所以我无法在eclipse上运行它来解决你的问题。你不需要使用操作来单击。你只需转到Webelement并执行click by clickmethod。现在你可能会提出这样的问题,然后w我可以在这里使用动作吗?因此动作用于,例如,有一些悬停会导致更多可单击的选项。因此,我们可以在这里使用动作。movetoelement(element)。buil()。perform();希望你能理解我。如果没有,那么告诉我,我将分享一段代码,这将使我能够轻松地讲述如何用selenium编写测试用例。学习愉快:-)嗨,Neha,感谢你的帮助和关注。作为selenium的新手,我真的无法理解我的基本方法和测试方法将如何工作。我已经编辑并更新了我的src代码。你能根据我的代码帮助我吗?谢谢。嗨,Neha,谢谢你的帮助和关心。作为selenium的新手,我真的不知道我的基本方法和测试方法如何工作。我已经编辑并更新了我的src代码。你能根据我的代码帮助我吗?谢谢。我不会
driver
be方法内部未定义?方法内部不会未定义
driver