WebDriver: errore di compilazione in classi di wrapper creato personalizzate di elementi e driver web

StackOverflow https://stackoverflow.com//questions/21023801

Domanda

// Voglio usare i miei elementi personalizzati invece di elementi Web definiti dal selenio // come WebElement e WebDriver, ecc. Quindi, ho creato le seguenti classi di wrapper personalizzate: -

//custom webdriver wrapper
package org.rsf.wrapper.driver;

import org.openqa.selenium.WebDriver;

public interface RsfWebDriver extends WebDriver{

}



//custom webelement wrapper
package org.rsf.wrapper.element;

import org.openqa.selenium.WebElement;

public interface RsfElement extends WebElement{


}
.

// Ora, sto chiamando le mie classi del wrapper nel seguente codice PAGETOBJECT. Ma dà errore.pls // Aiutami: -

package org.rsf.pages;

import java.util.concurrent.TimeUnit;


import org.apache.log4j.Logger;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.Select;
import org.rsf.bean.EnterQuoteBean;
import org.rsf.utilities.Utility;
import org.rsf.wrapper.driver.RsfWebDriver;
import org.rsf.wrapper.element.RsfElement;
import org.testng.Assert;


//pageObject 
public class EnterQuotePage extends PageBase {


    public EnterQuotePage(RsfWebDriver driver) {

        super(driver);
        super.driver=driver;

    }

    //creating my custom wrapper object
    private RsfElement element;
    private static Logger log=Logger.getLogger(EnterQuotePage.class);

     Utility utilities = new Utility();
     EnterQuoteBean eqb= new EnterQuoteBean();



     public void open(String url) {
            System.out.println("Inside get url");
            System.out.println("url is : " +url);
            System.out.println(" PB : Driver value :-" + driver);
            Assert.assertNotNull(this.driver);
            this.driver.get(url);
            System.out.println("After get url");
        }




    public void clickHit()
    {
          super.driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

              //ERROR OCCURS IN BELOW TWO LINES [in element]
              element=super.driver.findElement(By.id("hit"));
          element.click();
    } 




    public String getQuoteID(){

        String quoteText =findMessage.getText();
        String quoteText1[] = quoteText.split("\\=");
        quoteText1[1]=quoteText1[1].trim();
        System.out.println("Generated Quote Id :- " + quoteText1[1]);
        return quoteText1[1];
    }



    public void checkSuccessMessage(){

        String successMessage = findMessage.getText();

        Assert.assertEquals(element.getText().contains(successMessage), eqb.getSuccessMessage());

    }


    }
.

È stato utile?

Soluzione

Per risolvere questo problema fare come sotto

Creare un file XML con elementi e aggiungi una classe XML Parse, puoi trovare facilmente il codice online per XML Parser. ad esempio.

  <Element name="ElementSource">
    <Sample>
        <ElementTagName by="Xpth,id etc..">LocaterValue</ElementTagName>
        <txtUserName by="id">username</txtUserName>
    </Sample>
.

Creare una classe che dispongono di elementi di pagina Web statici come nel file XML E.G.

public static final String txtUserName = "txtUserName";
.

Puoi avere classi sagge della pagina o una singola classe. Inoltre, puoi menzionare direttamente i tuoi elementi in questa classe senza file XML.

Creare una classe che contiene moduli per leggere questo file XML o classe di elementi per ottenere locater elementi e il suo locazione di come xpath, id ecc. È possibile memorizzarli in variabili.

Infine, creare una classe denominata elementlocater avente funzione per individuare gli elementi secondo la sua posizione utilizzando la custodia dell'interruttore. per esempio.

    public WebElement locateElement(WebDriver driver, String Locater,
            String LocateBy) {
        try {
        switch (LocateBy.toLowerCase()) {
        case "xpath":
        return driver.findElement(By.xpath(Locater));
        case "id":
        return driver.findElement(By.id(Locater));
        ....
        //So on
        default:
        return null;
        }
        } 
        catch (Exception e) 
        {
            //Write to log or custom error message
        }
        return null;
        }
.

È possibile creare più funzioni in questa classe come IselementPreset ecc ...

In questo modo non è necessario andare nel codice sorgente o nei test ogni volta che qualsiasi tipo di carica degli ingranaggi o aggiornamento del codice deve essere effettuato. Modificare qualsiasi funzione o variabile farà :)

Altri suggerimenti

È necessario prendere una NosuchelementException:

try
{
    element=super.driver.findElement(By.id("hit"));
    element.click();
}
catch (NoSuchElementException e)
{
    // Do whatever you were planning to do if the element was not found
    // (you can try again for example)
}
.

In alternativa, è possibile effettuare le seguenti operazioni (salverà "la movimentazione delle eccezioni):

    List<WebElement> elements = super.driver.findElements(By.id("hit"));
    if (elements.size() > 0)
        elements.get(0).click();
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top