Я получаю сообщение об ошибке при запуске testng с Maven с использованием селена - PullRequest
0 голосов
/ 15 мая 2018

У меня проблема с запуском Page Factory с maven с использованием селена, и я буду признателен, если кто-то может помочь с этим. Когда я запускаю класс TestPage, я получаю следующую ошибку:

org.testng.TestNGException: 
Cannot inject @Test annotated Method [SelectCourse] with [interface org.openqa.selenium.WebDriver].
For more information on native dependency injection please refer to http://testng.org/doc/documentation-main.html#native-dependency-injection
package pageObjectFactoryMaven;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class SelectCoursePage {

    WebDriver driver;
    public SelectCoursePage (WebDriver driver) {
        PageFactory.initElements(driver,this);
    }

    @FindBy (id = "navBlue")
    WebElement studying;

    @FindBy (css = "element")
    WebElement findacourse;

    @FindBy ( id = "query")
    WebElement entersearchitem;

    public WebElement studying(){
        return studying;
    }

    public WebElement findacourse(){
        return findacourse;
    }

    public WebElement entersearchitem(){
        return entersearchitem;
    }
}
package pageObjectFactoryMaven;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class SignInPage {

    WebDriver driver;

    public SignInPage (WebDriver driver) {
        PageFactory.initElements(driver, this);
    }

    @FindBy (id ="MUA_CODE")
    WebElement enterusername;

    @FindBy (id ="PASSWORD" )
    WebElement enterpassword;

    @FindBy (name = "OK.DUMMY.MENSYS.1")
    WebElement clickLogin;

    public WebElement enterusername() {
        return enterusername;   
    }

    public WebElement enterpassword() {
        return enterpassword;
    }

    public WebElement clickLogin() {
        return clickLogin;
    }
}
package TestClass;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import pageObjectFactoryMaven.SelectCoursePage;
import pageObjectFactoryMaven.SignInPage;

public class TestPage {

    @BeforeMethod
    public void setup (){
        System.setProperty("webdriver.chrome.driver", "D:/Drivers/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("wwww.hhg.com");
    }

    @Test
    public void SelectCourse (WebDriver driver) {
        SelectCoursePage POF1 = new SelectCoursePage (driver);
        POF1.studying().click();
        POF1.findacourse().click();
        POF1.entersearchitem().sendKeys("computer science");    
    }

    @Test
    public void SignIn (WebDriver driver) {
        SignInPage POF2 = new SignInPage (driver);
        POF2.enterusername().sendKeys("kff");
        POF2.enterpassword().sendKeys("jdnd");
        POF2.clickLogin().click();     
    }
}
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>SeleniumExeterUni_POM</groupId>
  <artifactId>SeleniumProject</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>SeleniumProject</name>
  <url>http://maven.apache.org</url>

  <properties>
        <jre.level>1.10</jre.level>
        <jdk.level>1.8</jdk.level>
    </properties>


  <dependencies>
    <dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.14.3</version>
    <scope>test</scope>
</dependency>

     <dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.12.0</version>
</dependency>
  </dependencies>

     <build>
       <plugins>
                <!-- Compiler plug-in -->
         <plugin>
    <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${jdk.level}</source>
                    <target>${jdk.level}</target>
                </configuration>


   </plugin>


          <!-- Below plug-in is used to execute tests -->
    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.21.0</version>


                <configuration>
                    <suiteXmlFiles>
                        <!-- TestNG suite XML files -->
                        <suiteXmlFile>testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>
        </plugins>

       </build>
</project>

1 Ответ

0 голосов
/ 15 мая 2018

Проблема в вашем тестовом коде.Ваша подпись метода @Test говорит о том, что ему нужен объект WebDriver в качестве параметра, но вы не сказали TestNG, как он должен найти экземпляр и затем внедрить его в ваш метод @Test.TestNG сам по себе может только вставить нижеприведенные параметры в ваш метод @Test (который называется native инъекция )

  • ITestResult объект, который представляет тестрезультат.
  • Method объект, представляющий фактический метод.
  • ITestContext объект, представляющий выполняемый <test>.

Подробнее о всехих и многое другое можно найти на официальном сайте документации .

. Чтобы решить вашу проблему, у вас есть два способа сделать это.

  1. Подход 1 (Это не позволит вам выполнять ваши тесты параллельно)

Измените @BeforeMethod с

@BeforeMethod
public void setup (){
    System.setProperty("webdriver.chrome.driver", "D:/Drivers/chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("wwww.hhg.com");
}

на что-то вроде этого:

private WebDriver driver = null;

@BeforeMethod
public void setup (){
    System.setProperty("webdriver.chrome.driver", "D:/Drivers/chromedriver.exe");
    driver = new ChromeDriver();
    driver.get("wwww.hhg.com");
}

Вашкод работал с локальной переменной WebDriver в @BeforeMethod.Измененный в основном использует элемент данных, а ваш @BeforeMethod просто создает его экземпляр.Вам также необходимо избавиться от параметра WebDriver из вашего метода @Test.

подход 2

Вы используете те же детали, что и в подходе 1, но работаете с вариантом ThreadLocal вместо обычного WebDriver объекта.Подробнее о работе с переменными ThreadLocal вы можете прочитать в моем блоге здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...