【发布时间】:2020-03-09 21:45:16
【问题描述】:
社区您好:我对 Page Factory 有一些问题。
java.lang.NullPointerException
at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)
at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)
at com.sun.proxy.$Proxy17.sendKeys(Unknown Source)
at pages.page_First.searchText(page_First.java:29)
at stepdefs.stepdefs_First.iQueryForCucumberSpringSelenium(stepdefs_First.java:34)
at ✽.I query for "Cucumber Selenium" cucumber spring selenium(file:src/test/resources/features/first.feature:11)
这里,我的功能:
Feature: Navigation Test
Scenario Outline: Search google.com to verify google search is working
Given I go to Google
When I query for "<search>" cucumber spring selenium
And click search
Then google page title should become the first page
Examples:
| search |
| Cucumber Selenium |
我的测试基类:
public class TestBase {
private final String OSName;
public WebDriver driver;
public TestBase() throws IOException {
OSName = System.getProperty("os.name");
System.out.println(OSName);
Properties prop;
if (OSName.equalsIgnoreCase("Mac")) {
prop = new Properties();
FileInputStream fis = new FileInputStream("\"//src//main//resources//data//config.properties\"");
prop.load(fis);
} else if (OSName.equalsIgnoreCase("Win")) {
prop = new Properties();
FileInputStream fis = new FileInputStream("\"//src//main//resources//data//config.properties\"");
prop.load(fis);
}
}
public void initialization() {
//Takes the properties from config.properties file
String browserName = System.getProperty("browser");
String url = System.getProperty("url");
System.out.println("Property loaded" + browserName);
if (browserName.equalsIgnoreCase("chrome")) {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
} else if (browserName.equalsIgnoreCase("firefox")) {
WebDriverManager.firefoxdriver().setup();
driver = new FirefoxDriver();
System.out.println("In prop eles loaded FF1");
} else if (browserName.equalsIgnoreCase("ie")) {
WebDriverManager.iedriver().setup();
driver = new InternetExplorerDriver();
} else if (browserName.equalsIgnoreCase("edge")) {
WebDriverManager.edgedriver().setup();
driver = new EdgeDriver();
} else if (browserName.equalsIgnoreCase("opera")) {
WebDriverManager.operadriver().setup();
driver = new OperaDriver();
} else if (browserName.equalsIgnoreCase("safari")) {
System.setProperty("webdriver.safari.driver","/usr/bin/safaridriver");
driver = new SafariDriver();
} else {
System.out.println("No browser detected");
}
System.out.println("Property loaded" + url);
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.get(url);
}
}
页面工厂类:
public class page_First extends BasePage {
public page_First(WebDriver driver) throws IOException {
PageFactory.initElements(driver, this);
}
//////////////////////////////////////////////WEB ELEMENTS//////////////////////////////////////////////////////////
@FindBy(name = "q")
private WebElement searchText;
@FindBy(name="btnK")
private WebElement searchButton;
//////////////////////////////////////////////BASE METHODS//////////////////////////////////////////////////////////
public void searchText(String search) {
searchText.sendKeys(search);
}
public void enterButton (){
clickElement(searchButton);
}
}
还有我的步骤定义类:
public class stepdefs_First {
private WebDriver driver;
private page_First page_first = PageFactory.initElements(driver, page_First.class);
public stepdefs_First() throws IOException {
}
@Given("I go to Google")
public void iGoToGoogle() {
System.out.println("navigating through Googl");
}
@When("I query for {string} cucumber spring selenium")
public void iQueryForCucumberSpringSelenium(String search) throws Exception {
page_first.searchText(search);
}
@And("click search")
public void clickSearch() {
page_first.enterButton();
}
@Then("google page title should become the first page")
public void googlePageTitleShouldBecomeTheFirstPage() {
System.out.println("All OK");
}
}
浏览器打不开,在page_first.searchText(search);
中遇到问题我从 Maven (bonygarcia) 中的 WebDriverManager 依赖项获取浏览器,并从 config.properties 获取浏览器、url 和 os。
如果有人可以帮助我,请。提前致谢
【问题讨论】:
-
你有没有在任何地方调用
initialization()方法? -
不,我不知道该怎么做。
-
这个问题你还需要帮助吗?
-
是的 Fenio:我仍然需要帮助。
-
为了帮助你,我还需要
BasePage.java的来源,想知道你用的是什么版本的黄瓜?此外,我们可以在这里聊天,或者您可以通过电子邮件(在我的个人资料中)与我联系。
标签: java maven selenium-webdriver cucumber page-factory