He navegado por el sitio, pero no encontrar la respuesta que estoy buscando.

He

  1. Superbase clase – aquí acabo de crear el objeto de un webdriver
  2. Baseclass – En esta clase extiendo Superbase clase, invocar el conductor, y abrir la URL.
  3. Clicklink de clase En esta clase, me volvió a extender la Superbase de la Clase, pero sólo para encontrar una excepción de puntero nulo. Creo que me estoy haciendo la excepción, ya que el controlador de objeto no inicializado.

Yo sólo soy un principiante, y no he probado el browserfactory y otras opciones, ya que quiero empezar con flujo simple.

Superclase

    Public class Superclass
    {
public webdriver Driver;
}

Baseclass

public class Baseclass extends Superclass
{
setting capabilities and launching the browser
}

ClickLink

public class Clicklink extends Superclass
{
here I want to click on a link
driver.findelement(by.xpath("xpath").click());
//after this statement I get a null pointer exception
}

Puede usted por favor me guía aquí? ¿cómo puedo lograr el mismo.

Gracias!

  • Mostrar sus métodos, por favor.
  • Es «la configuración de las capacidades y el lanzamiento del navegador» en un @Before* método o de un constructor?
  • Probablemente por la fabricación de un objeto de la superclase en el niño y, a continuación, invocar a través de ella. Superclase sl = new Superclase(); sl.el controlador.findelement(por.xpath(«xpath»).haga clic en());
  • No puedo publicar los métodos aquí, como lo es para el cliente de la máquina, sin embargo, a continuación se muestra cómo se ve En la Superclase no hay métodos, sólo un público controlador variable En Baseclass, tengo 1 métodos, que se abre el navegador y verifica que el título de la página. En Clicklink clase, tengo 2 métodos Primero tengo que crear un objeto de la clase base y, a continuación, en Openbrowser método(primer método en el Clicklink de clase), que yo llamo el método de Baseclass– esto funciona bien el problema es en el 2º método en clickClink de la clase, el método de envío, en el que quiero usar el objeto de la Superclase para hacer clic en un enlace. Espero que esto ayude!
  • Yo estuve la creación de capacidades en el uso de «@Antes», y «@Test», pero más tarde me quita
  • sigue siendo el mismo. yo.e.excepción de puntero nulo
  • Has revisado de la página modelo de objetos de tutoriales? Muchos/la mayoría de ellos muestran cómo hacerlo. Puede empezar por leer el Selenio docs en el POM. seleniumhq.org/docs/…
  • Eso es porque usted no está inicializando el webdriver en el constructor de la superclase.

InformationsquelleAutor Ashwin | 2017-02-19

5 Comentarios

  1. 2

    Esta es la suerte de conjeturas hecho de mi lado, pero por favor, asegúrese de que su Superclase que realmente establece el conductor y la devuelve. En realidad se puede hacer en ambos métodos:

    public class Superclass
    {
      public WebDriver driver;
      public Superclass(){
        driver = new FirefoxDriver();
      }
      public WebDriver getdriver(){
        if (driver == null){
          driver = new FirefoxDriver();
          return driver;
        }else{
          return driver;
        }
      }
    }

    Y más tarde en los métodos que lo llame por:

    public class Clicklink extends Superclass
    {
    
    getdriver().findelement(by.xpath("xpath").click());
    
    }
    • Gracias @Pavel, esto ayuda a
  2. 2

    SuperClass y BaseClass son muy buenos nombres. No utilice el lenguaje de codificación a nombre de sus clases de uso de la lengua de el problema En este caso, el sitio web de pruebas de la aplicación, que nos LoginPage, CartPage, ProfilePage, etc. El uso de la Página Objeto De Patrón. Un BrowserFactory puede dar el ejemplo de WebDriver para cada prueba. Puesto que todas estas ajuste la idea es una página, uso de la extensión de la clase a partir de un estándar PageObject para proporcionar esta capacidad. Al navegar, tener la actual página de construir una instancia de la nueva página y que pasa en el actual webDriver instancia. También puede utilizar un PageFactory para proporcionar una instancia del objeto de página.

    public abstract class PageObject {
        public WebDriver driver;
        PageObject() {
            //Page can initialise its self
            this.driver = BrowserFactory.webDriver();
        }
        PageObject(final WebDriver webDriver) {
            this.driver = webDriver;
            }
        }
  3. 0

    Si usted no quiere pasar a instancia del controlador a los Objetos de la Página constructor podría crear alguna clase de contenedor para el conductor y ponerlo antes de la prueba y quite después de correr. Por ejemplo:

    class Driver {
        public static ThreadLocal<IWebDriver> driverInstance = new ThreadLocal<IWebDriver>();
    
        public static IWebDriver GetDriver() {
            return driverInstance.Value;
        }
    
        public static void SetDriver(IWebDriver driver) {
            driverInstance.Value = driver;
        }
    }

    y hacer de este campo contenedor ThreadLocal para evitar problemas con la aplicación en paralelo.

  4. 0
    I did use below code in utility class like below
      public static WebDriver setup(WebDriver driver)
       {
           if(driver == null) {
               driver = new FirefoxDriver();
               driver.manage().window().maximize();
               driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
               return driver;
           }else
              return driver;
    
             //System.out.println("in method "+ driver.getTitle() );
    
       }
    • clase pública Ebay { WebDriver driver=null; @Test public void testlogic() { driver=Contenedor.el programa de instalación(driver); controlador.get(«ebay.co.reino unido»); }
    • Usted realmente necesita para editar este.
  5. 0

    He tomado un enfoque ligeramente diferente que la mayoría de los de este hilo. Cuando inicio una sesión de prueba, me pase el nombre del navegador como un argumento (es decir,- Dbrowser=chrome) con el fin de ser capaz de probar mi aplicación web con los diferentes navegadores. Luego he utilizado el «navegador» sistema de la propiedad para obtener el nombre del navegador cuando setup() es llamado por mi en el marco de prueba. En mi caso, puedo usar JUnit anotaciones en el fin de JUnit para la instalación de todas las dependencias necesarias antes de ejecutar alguna de las pruebas.

    @BeforeClass
    public static void setup() throws Exception {
        //Set up other stuff
        String browser = System.getProperty("browser");
        try {
            SessionDataProvider.driver = TestUtils.createDriver(browser);
        } catch (Exception e) {
            ...
        }
    }

    La createDriver(String) es un método de fábrica que crea una instancia del controlador correcto.

    public static WebDriver createDriver(String browserName) throws Exception {
        WebDriver driver = null;
        try {
            switch(browserName) {
            case "firefox":
                //code to system props and instantiate the driver
                break;
            case "chrome":
                //code to system props and instantiate the driver
                break;
            case "ibrowser":
                //code to system props and instantiate the driver
                break;
            case "edge":
                //code to system props and instantiate the driver
                break;
            case "safari":
                //code to system props and instantiate the driver
                break;
            default:
                throw new Exception("Unsupported browser: " + browserName);
            }
        return driver;
    }

    Entonces, cuando yo ejecutar un paso de la definición, yo simplemente obtener el controlador desde el proveedor de datos de la clase:

    @And("(I click)/Click on {string}")
    public void click(String arg) {
    
        //Parse String arg and create web element locator...
        try {
            By locator = ...;
            WebElement element = new WebDriverWait(SessionDataProvider.driver, 2)
                .until(ExpectedConditions.elementToBeClickable(locator));
            element.click();
        } catch (Exception e) {
            //handle exception
        }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here