Webdriver: ошибка компиляции в пользовательских созданных классах обертки веб-элементов и драйверов

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

Вопрос

// Я хочу использовать свои собственные пользовательские элементы вместо веб-элементов определенного селена // Мне нравится Weafelement и WebDriver и т. Д. Итак, я создал следующие пользовательские классы обертки: -

//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{


}
.

// Теперь я звоню в мои классы обертки на следующем коду PageObject. Но это дает Error.pls // Помогите мне: -

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());

    }


    }
.

Это было полезно?

Решение

Чтобы решить эту проблему, как показано ниже

Создайте файл XML с элементами и добавьте класс анализа XML, вы можете легко найти код в Интернете для анализатора XML. например.

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

Создать класс, которые имеют статические элементы веб-страницы такими же, как и в файле XML E.G.

public static final String txtUserName = "txtUserName";
.

Вы можете иметь страницу мудрых классов или один класс. Кроме того, вы можете напрямую упомянуть свои элементы в этом классе без файла XML.

Создание класса, содержащего модули для чтения этого класса XML-файла или класса элемента, чтобы получить элемент-локатип и его местоположение, подобное XPath, ID и т. Д. Вы можете хранить их в переменные.

Наконец, создайте класс с именем elemilectlocater, имеющим функцию, чтобы найти элементы в соответствии с его местоположением, используя регистр коммутатора. например

    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;
        }
.

Вы можете создавать больше функций в этом классе, такими как IselementPreset и т. Д. ...

, делая это, вам не нужно входить в исходный код или в тестах каждый раз, когда необходимо выполнить любой элемент HTML-развертывания или обновление кода. Изменить любую одну функцию или переменную будет делать :)

Другие советы

Вам нужно поймать 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)
}
.

В качестве альтернативы вы можете сделать следующее («Сохранить» вы обработали исключение):

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top