2015-09-10 2 views
0

Я новичок в selenium, и я столкнулся с этим исключением null-указателя в моем коде, Вот класс одного из объектов моей страницы (Страница входа).Selenium WebDriver POM Обработка сложных классов

package Pages; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait; 

import Lib.lib; 

public class LoginPage extends lib{ 

    WebDriver driver; 
    By loginLink = By.xpath("/html/body/nav/div/a[7]"); 
    By emailInput = By.name("email"); 
    By passwordInput = By.name("password"); 
    By signInBtn = By.className("btn btn-primary btn-lg"); 

    public LoginPage(WebDriver driver) 
    { 
     this.driver=driver; 
    } 

    public void redirectToLogin() 
    { 
     driver.findElement(loginLink).click(); 
     new WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfElementLocated(emailInput)); 
    } 

    public void enterEmail(String email) 
    { 
     driver.findElement(emailInput).sendKeys(email); 
    } 

    public void enterPW(String password) 
    { 
     driver.findElement(passwordInput).sendKeys(password); 
    } 

    public void clickOnSignIn() throws Exception 
    { 
     driver.findElement(signInBtn).click(); 
     Thread.sleep(3000); 
    } 

    public void loginToKB(String userEmail, String userPW) throws Exception 
    { 
     this.redirectToLogin(); 

     this.enterEmail(userEmail); 

     this.enterPW(userPW); 

     this.clickOnSignIn(); 
    } 

} 

И это мой тест код

package TestCases; 

import org.testng.annotations.Test; 

import Lib.lib; 
import Pages.LoginPage; 

public class logging_in extends lib { 
    LoginPage memLogin = new LoginPage(driver); 

    @Test 
    public void user_login() throws Exception 
    { 

     memLogin.loginToKB("[email protected]", "uziii"); 

    } 

} 

Я импортировать конфигурацию драйвера хром из Lib класса, который следующий случай,

package Lib; 

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.chrome.ChromeOptions; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.AfterTest; 

public class lib { 

    protected static WebDriver driver = null; 

    @BeforeTest 
    public void chrome_extension() 
    { 
     System.setProperty("webdriver.chrome.driver", "chromedriver.exe"); 
     ChromeOptions options = new ChromeOptions(); 
     options.addArguments("--start-maximized"); 
     driver = new ChromeDriver(options); 
     driver.get("http://www.testsite.com"); 
    } 


    @AfterTest 
    public void quit() 
    { 
     driver.quit(); 
    } 

} 

Когда я бегу мое испытание Случай (logging_in), я первоначально перенаправляюсь на страницу веб-сайта, но после этого он останавливает выполнение и дает мне сложную ошибку класса. кажется

Ошибка следует отметить в этом направлении,

По signInBtn = By.className ("БТН БТН-первичный БТН-LG");

Пожалуйста, дайте мне знать, как обрабатывать сложные классы. Любая помощь/обратная связь будут оценены. Благодарю.

+1

Вы указали экземпляр драйвера webdriver как закрытый в классе lib, который корректен, а затем вы снова объявляете экземпляр драйвера webdriver в классе LoginPage, который является неправильным. –

+0

@RupeshShinde Большое спасибо, что удалось решить. Можете ли вы дать мне знать, как бороться с сложными именами классов. Я получаю сообщение об ошибке org.openqa.selenium.InvalidSelectorException: недействительный селектор: Составные имена классов не допускается , который, кажется, это один, По signInBtn = By.className («БТН БТН-первичный БТН-ДЖИ») ; Любая идея, как с этим справиться? – Uziii

+0

@Uziii, пожалуйста, обратите внимание, если вы хотите изменить вопрос, а затем отредактировать исходный запрос, иначе вы будете помечены, чтобы задавать вопросы ненадлежащим образом. –

ответ

0
  1. Вы передаете статический экземпляр драйвера без инициализации конструктору LoginPage (Webdriver driver). Вам нужно будет инициализировать диск либо в статическом блоке в lib, либо до инициализации переменной memLogin на странице logging_in.
  2. для сложных классов вам нужно будет использовать XPath. если вы можете показать нам html-фрагмент вашего DOM, мы сможем рассказать вам о соответствующем XPath.
0

Вы объявили водитель веб-драйвер экземпляр в качестве частного в классе Lib, который является правильным, то your'e снова объявить драйвер веб-драйвер экземпляра в классе LoginPage что неправильно.

Удалите второе объявление, чтобы исключить исключение нулевого указателя.

Смежные вопросы