2017-02-04 3 views
2

Я новичок в обучении Селена. Я получаю null pointer exception, когда я пытаюсь использовать веб-элемент - Milestone_Tile_Text.click; в моем коде, но он отлично работает, когда я используюЯ получаю исключение исключения null для webelement, определенного под аннотацией @FindBy в заводской модели страницы

LoginTestScript.fd.findElement(By.linkText("Milestone")).click(); 

Пожалуйста, смотрите ниже код, который я использовал PageFactory.initElements как хорошо, но не знаю, как решить эту ошибку.

public class MilestoneTileModel 
{ 

    GenerateTestData objtestdata = new GenerateTestData() ; 

     public MilestoneTileModel() //constructor 
      { 
       PageFactory.initElements(LoginTestScript.fd, this); 
      } 

     @FindBy(xpath="//a[text()='Milestone']") 
     WebElement Milestone_Tile_Text; 

public void Milestone_Tile_Click() 
      { 
       Milestone_Tile_Text.click(); 
       LoginTestScript.fd.findElement(By.linkText("Milestone")).click(); 
LoginTestScript.fd.findElement(By.xpath("//*@id='CPH_btnAddNewMilestoneTop']")).click(); 
      } 
} 
+0

ли, что ссылка кликабельна с помощью XPath? . LoginTestScript.fd.findElement (By.xpath ("// а [текст() = 'Milestone']")) нажмите(); –

+0

Пожалуйста, проверьте последний щелчок по методу Milestone_Tile_Click(), у вас плохой xpath, вам нужно открыть [круглые скобки после * – lauda

+0

@peterpawar ... да, эта ссылка доступна кликабельно. –

ответ

0

Временные проблемы могут возникать чаще, когда вы используете метод init.

Проблема синхронизации - это когда вы запускаете элемент, который сразу же пытается найти драйвер, и при сбое вы не получите предупреждения, но элементы будут ссылаться на нуль.

Вышеприведенное может происходить, например, потому, что страница не была полностью отображена или драйвер просматривает старую версию страницы.

Исправление может быть, чтобы определить элементы, как свойство и на get собственности использовать драйвер, чтобы получить элемент со страницы

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

+0

Временная проблема возврата неявного таймаута. – Liniel

0

Первая проблема, что я вижу: вы не установили LoginTestScript

После документации сначала вы должны установить переменную PageObject: GoogleSearchPage page = PageFactory.initElements(driver, GoogleSearchPage.class);

Лучший способ богатому этой точки является модель отдельной страницы объекта и сценарий scipt

Вы кулак файл POM должен содержать:

LoginTestPOM

public class LoginTestPOM { 
    @FindBy(xpath="//a[text()='Milestone']") 
    WebElement MilestoneTileText; 

    public void clickMilestoneTitleText(){ 
      MilestoneTitleText.click(); 
    } 
} 

TestScript

import LoginTestPOM 
public class TestLogin { 
    public static void main(String[] args) { 
     // Create a new instance of a driver 
     WebDriver driver = new HtmlUnitDriver(); 

     // Navigate to the right place 
     driver.get("http://www.loginPage.com/"); 

     // Create a new instance of the login page class 
     // and initialise any WebElement fields in it. 
     LoginTestPOM page = PageFactory.initElements(driver, LoginTestPOM.class); 

     // And now do the page action. 
     page.clickMilestoneTitleText(); 
    } 
} 

Это основа шаблон страницы объекта.

ПРИМЕЧАНИЕ. Я пишу этот код только в браузере, чтобы он мог содержать некоторые ошибки.

LINK: https://github.com/SeleniumHQ/selenium/wiki/PageFactory

"уродливым" решение без страницы объекта шаблон:

UglyTestScript

public class UglyTestLogin { 
    public static void main(String[] args) { 
     // Create a new instance of a driver 
     WebDriver driver = new HtmlUnitDriver(); 

     // Navigate to the right place 
     driver.get("http://www.loginPage.com/"); 

     // DON'T create a new instance of the login page class 
     // and DON'T initialise any WebElement fields in it. 
     // And do the page action. 
     driver.findElement(By.xpath("//a[text()='Milestone']").click() 
     } 
} 
Смежные вопросы