Selenium和Testng失败的页面对象模式

Selenium和Testng失败的页面对象模式,selenium,webdriver,testng,pom.xml,Selenium,Webdriver,Testng,Pom.xml,我在使用testng运行下面的页面对象模型时遇到问题 测试类1 package Proj; public class signInPage { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:/chromedriver_win32/chromedriver.exe"); ChromeDriver driver = new

我在使用testng运行下面的页面对象模型时遇到问题

测试类1

package Proj;

public class signInPage {

    public static void main(String[] args)  {
         System.setProperty("webdriver.chrome.driver", "C:/chromedriver_win32/chromedriver.exe");
      ChromeDriver driver = new ChromeDriver(); 
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }
        public signInPage (WebDriver driver)
        {
            this.driver=driver;
        }

        WebDriver driver;
        public signInPage() 
        {
            driver.get("baseURL");

        }

        By Email_address = By.name("Username");
        By Password = By.id("Password");

        public WebElement Email_address () 
        {
        return driver.findElement(Email_address);
        }

        public WebElement Password ()
        {
            return driver.findElement(Password);
        }
       public WebElement button_id () 
    {
    return driver.findElement(button_id);
    }
}
测试类2

package Proj;

public class MyDetailsPage {

    public MyDetailsPage (WebDriver driver)
    {
        this.driver=driver;
    }
    WebDriver driver;

    By My_Details=By.xpath(".//*[@id='masterForm']/div[5]/div/div[3]/div[3]/a/span");
    By First_name = By.id("FirstName"); 
    By  Last_name= By.name("NameModel.LastName");
    By button_id= By.id("stage_one_button");

    public WebElement My_Details () 
    {
    return driver.findElement(My_Details);
    }

    public WebElement First_name () 
    {
    return driver.findElement(First_name);
    }

    public WebElement Last_name () 
    {
    return driver.findElement(Last_name);
    }
    }
测试数据页

 package Proj;



    public class testData  {

        public static void main (String[] args) throws InterruptedException {
            System.setProperty("webdriver.chrome.driver", "C:/chromedriver_win32/chromedriver.exe");
              ChromeDriver driver = new ChromeDriver(); 
    }

        public void testDetails (WebDriver driver)
        {
            this.driver=driver;
        }
            static WebDriver driver;


               protected static String baseUrl;
               protected static String Email_address;
               protected static String Password;
               protected String First_name;
               protected String Last_name;

        public void Data () {
                 baseUrl = "https://login.yahoo.com/";
                 driver = new ChromeDriver();
                 Email_address = "myname@yahoo.com";
                 Password = "myname";
                 First_name = "Testing";
                 Last_name = "Account";

        }
         }
测试用例

package Proj;

import org.testng.annotations.Test;
import org.openqa.selenium.SearchContext;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeSuite;


public class TestCases extends testData {

    private static SearchContext WebElement;

    @BeforeSuite
    public void BeforeSuite () {
        System.setProperty("webdriver.chrome.driver", "C:/chromedriver_win32/chromedriver.exe");
         WebDriver driver = new ChromeDriver ();    

    }

     @BeforeClass 
    public void driver(WebDriver driver)  throws InterruptedException

            {
               this.driver = driver;
                driver.get(baseUrl);    
            }

      @Test
     public void AllTest () throws InterruptedException {
        signInPage a = new signInPage (driver);
        a.Email_address().sendKeys(Email_address);
        a.Password().sendKeys(Password);
        a.SIGN_IN().click();

        MyDetailsPage e = new MyDetailsPage (driver);       
        e.My_Details ().click();
        e.First_name ().sendKeys("Testing");
        e.Last_name (). sendKeys ("Account");
        e.button_id ().click();     

        }
        } 
它打开浏览器,但无法输入baseUrl,无法执行测试。它在TestCases类中失败。无论我如何尝试重新配置,都没有运气。我感谢你的及时帮助。多谢各位

FAILED CONFIGURATION: @BeforeClass driver
org.testng.TestNGException: 
Can inject only one of <ITestContext, XmlTest> into a BeforeClass annotated driver.
For more information on native dependency injection please refer to http://testng.org/doc/documentation-main.html#native-dependency-injection
    at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:244)
    at org.testng.internal.Parameters.createParameters(Parameters.java:172)
    at org.testng.internal.Parameters.createParameters(Parameters.java:458)
    at org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:118)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:206)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:146)
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:166)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
    at org.testng.TestRunner.privateRun(TestRunner.java:744)
    at org.testng.TestRunner.run(TestRunner.java:602)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
    at org.testng.SuiteRunner.run(SuiteRunner.java:289)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
    at org.testng.TestNG.runSuites(TestNG.java:1144)
    at org.testng.TestNG.run(TestNG.java:1115)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)

SKIPPED: AllTest
org.testng.TestNGException: 
Can inject only one of <ITestContext, XmlTest> into a BeforeClass annotated driver.
For more information on native dependency injection please refer to http://testng.org/doc/documentation-main.html#native-dependency-injection
    at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:244)
    at org.testng.internal.Parameters.createParameters(Parameters.java:172)
    at org.testng.internal.Parameters.createParameters(Parameters.java:458)
    at org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:118)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:206)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:146)
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:166)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
    at org.testng.TestRunner.privateRun(TestRunner.java:744)
    at org.testng.TestRunner.run(TestRunner.java:602)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
    at org.testng.SuiteRunner.run(SuiteRunner.java:289)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)
    at org.testng.TestNG.runSuites(TestNG.java:1144)
    at org.testng.TestNG.run(TestNG.java:1115)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)


===============================================
    Default test
    Tests run: 1, Failures: 0, Skips: 1
    Configuration Failures: 1, Skips: 0
===============================================


    ===============================================
    Default suite
    Total tests run: 1, Failures: 0, Skips: 1
    Configuration Failures: 1, Skips: 0
    ===============================================
配置失败:@BeforeClass驱动程序
org.testng.TestNGException:
只能将其中一个注入到带BeforeClass注释的驱动程序中。
有关本机依赖项注入的更多信息,请参阅http://testng.org/doc/documentation-main.html#native-依赖注入
位于org.testng.internal.Parameters.checkParameterTypes(Parameters.java:244)
位于org.testng.internal.Parameters.createParameters(Parameters.java:172)
位于org.testng.internal.Parameters.createParameters(Parameters.java:458)
位于org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:118)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:206)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:146)
位于org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:166)
位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
位于org.testng.TestRunner.privateRun(TestRunner.java:744)
位于org.testng.TestRunner.run(TestRunner.java:602)
位于org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
在org.testng.SuiteRunner.runsequential上(SuiteRunner.java:375)
位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
运行(SuiteRunner.java:289)
位于org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
位于org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
在org.testng.testng.runSuitesSequentially上(testng.java:1301)
位于org.testng.testng.runSuitesLocally(testng.java:1226)
位于org.testng.testng.runSuites(testng.java:1144)
位于org.testng.testng.run(testng.java:1115)
位于org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
位于org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
位于org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
跳过:AllTest
org.testng.TestNGException:
只能将其中一个注入到带BeforeClass注释的驱动程序中。
有关本机依赖项注入的更多信息,请参阅http://testng.org/doc/documentation-main.html#native-依赖注入
位于org.testng.internal.Parameters.checkParameterTypes(Parameters.java:244)
位于org.testng.internal.Parameters.createParameters(Parameters.java:172)
位于org.testng.internal.Parameters.createParameters(Parameters.java:458)
位于org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:118)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:206)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:146)
位于org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:166)
位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
位于org.testng.TestRunner.privateRun(TestRunner.java:744)
位于org.testng.TestRunner.run(TestRunner.java:602)
位于org.testng.SuiteRunner.runTest(SuiteRunner.java:380)
在org.testng.SuiteRunner.runsequential上(SuiteRunner.java:375)
位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
运行(SuiteRunner.java:289)
位于org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
位于org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
在org.testng.testng.runSuitesSequentially上(testng.java:1301)
位于org.testng.testng.runSuitesLocally(testng.java:1226)
位于org.testng.testng.runSuites(testng.java:1144)
位于org.testng.testng.run(testng.java:1115)
位于org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
位于org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)
位于org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76)
===============================================
默认测试
测试运行:1,失败:0,跳过:1
配置失败:1,跳过:0
===============================================
===============================================
默认套件
运行的测试总数:1,失败:0,跳过:1
配置失败:1,跳过:0
===============================================

公共无效驱动程序(WebDriver驱动程序)
不允许在
@BeforeClass
方法上使用。您必须删除该参数,并找到另一种方法来设置
驱动程序,正如juherr指出的那样,您不能通过传递webdriver以这种方式参数化@BeforeClass,相反,您可以按照以下方法进行设置:

public class TestCases extends testData {

private static SearchContext WebElement;
WebDriver driver;


@BeforeSuite
public void BeforeSuite () throws InterruptedException {
    System.setProperty("webdriver.chrome.driver", "C:\\Eclipse\\Selenium\\chromedriver.exe");

}

@BeforeClass 
public void driver()  throws InterruptedException
{
    driver = new ChromeDriver ();    

    testData td = new testData ();

    driver.get(td.baseUrl);    
}
/
/
/
/

我已经按照建议做了,并且得到了这个错误-配置失败:@BeforeClass驱动程序java.lang.NullPointerException:entry中的null值:url=null您需要将baseURL值定义为
baseURL=”https://login.yahoo.com/";
在您的TestCases classI中,我已经在我的TestData页面中定义了URL。我按照您的建议,在TestCases中定义了URL。它打开了Web,但没有执行操作。是的,但在TestCases类中无法访问,您必须为BaseURL提供一种可访问的方法。我已经这样做了,但它仍然没有执行操作。我已经在public void driver(WebDriver driver)中删除了(WebDriver)但仍然会遇到相同的问题-浏览器打开但未执行任何操作。