在硒中使用FindBy时出错。错误消息空点异常

时间:2019-02-28 08:19:30

标签: java selenium selenium-webdriver findby

import com.sun.javafx.PlatformUtil;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
import org.openqa.selenium.support.ui.Select;
import org.testng.annotations.Test;

public class HotelBookingTest {
    WebDriver driver;
    @FindBy(xpath= "//*[@class='hotelApp ']")
    public static WebElement hotelLink;


    @Test
    public void shouldBeAbleToSearchForHotels() {
        setDriverPath();
        driver = new ChromeDriver();
        driver.get("https://www.cleartrip.com/");
        boolean hotelLinkDisplayed = hotelLink.isDisplayed();

       hotelLink.click();
        driver.quit();

    }
}

在“ HotelLink.click”行出现错误,并且使用findBy批注定义了hotelLink元素,但出现“ java.lang.NullPointerException”错误

3 个答案:

答案 0 :(得分:3)

在使用@FindBy批注时,需要先初始化所有网络元素,然后再使用它。

HotelBookingTest类创建一个构造,并使用PageFactory进行初始化,如下所示:

import com.sun.javafx.PlatformUtil;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
import org.openqa.selenium.support.ui.Select;
import org.testng.annotations.Test;

public class HotelBookingTest {
    WebDriver driver;

    @FindBy(xpath= "//*[@class='hotelApp ']")
    public WebElement hotelLink;

    public HotelBookingTest(WebDriver driver) {
        PageFactory.initElements(driver, this);
    }

    @Test
    public void shouldBeAbleToSearchForHotels() {
        setDriverPath();
        driver = new ChromeDriver();
        new HotelBookingTest(driver);
        driver.get("https://www.cleartrip.com/");
        boolean hotelLinkDisplayed = hotelLink.isDisplayed();

        hotelLink.click();
        driver.quit();
    }
}

从相应的软件包中导入PageFactory,并在“ hotelLink”之前删除static

希望对您有帮助...

答案 1 :(得分:1)

由于您使用的是@FindBy注释 您必须在使用之前初始化该元素。

您可以通过创建接受WebDriver类型作为参数的参数化构造函数来实现。

        PageFactory.initElements(driver, this);```

and call this constructor after opening the browser.
i.e after this line 
```driver = new ChromeDriver();```

答案 2 :(得分:1)

对于FormHelperText注释,您需要在搜索WebElement之前实现它。

您可以添加一种简单的方法来实现此目的:

@FindBy