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

时间:2017-05-13 00:38:51

标签: selenium webdriver testng pom.xml

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

TestClass 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);
    }
}

TestClass 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);
    }
    }

TestData页面

 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";

        }
         }

的TestCases

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
    ===============================================

2 个答案:

答案 0 :(得分:1)

public void driver(WebDriver driver)方法不允许

@BeforeClass。您必须删除参数并找到另一种设置driver

的方法

答案 1 :(得分:1)

正如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);    
}
/
/
/
/