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”错误
答案 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