- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 POM 创建一个测试框架,但每当我使用 PageFactory
时,它都会给出一个 NullPointerException
。
我只是想打开应用程序并检查给定元素在页面上的位置。
这是我的驱动类:
public class Driver extends BaseSetup
{
protected AndroidDriver<MobileElement> driver;
public Driver() {
this.driver = super.getDriver();
}
}
这是我的 BaseSetup 类:
public class BaseSetup {
private DesiredCapabilities capabilities;// = new DesiredCapabilities();
protected AndroidDriver<MobileElement> androidDriver = null;
private String appiumPort="4723";
private String serverIp="0.0.0.0";
//String workingDevice = "emulator-5554";
String workingDevice = "d6f08719";
@BeforeClass
public void setup() {
initDriver();
}
public AndroidDriver<MobileElement> getDriver() {
return androidDriver;
}
private void initDriver() {
System.out.println("Inside initDriver method");
// DesiredCapabilities cap = new DesiredCapabilities();
capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "OnePlus6T");
capabilities.setCapability("udid", workingDevice);
capabilities.setCapability("appPackage", "com.ServiceApp.Vivek");
capabilities.setCapability("appActivity", ".MainActivity");
capabilities.setCapability("noReset", "true");
String serverUrl = "http://" + serverIp + ":" + appiumPort + "/wd/hub";
try
{
System.out.println("Argument to driver object : " + serverUrl);
androidDriver = new AndroidDriver<MobileElement>(new URL(serverUrl), capabilities);
}
catch (NullPointerException | MalformedURLException ex) {
throw new RuntimeException("appium driver could not be initialised for device ");
}
System.out.println("Driver in initdriver is : "+androidDriver);
}
@AfterClass
public void tearDown() {
androidDriver.quit();
}
@BeforeMethod
public void beforeMethod(Method method) {
System.out.println("Starting Method :" + method.getName());
System.out.println("-----------------------------------------");
}
@AfterMethod
public void afterMethod(Method method) {
System.out.println("Ending Method :" + method.getName());
System.out.println("-----------------------------------------");
}
}
这是我的 OpenApplication 类:
public class OpenApplication extends Driver{
public OpenApplication(AppiumDriver<MobileElement> driver) {
super();
PageFactory.initElements(new AppiumFieldDecorator(driver), OpenApplication.class);
}
public void validatePageLoaded() throws InterruptedException {
System.out.println("timer start");
Thread.sleep(5000);
System.out.println("timer end");
String str=newUser.getText();
System.out.println(str);
System.out.println("Successfully");
if (newUser.isDisplayed() && existingCustomer.isDisplayed()
&& welcomeText.isDisplayed()) {
System.out.println("App open Successfully..!");
} else {
System.out.println("App is not loaded..!");
}
}
@CacheLookup
@AndroidFindBy(xpath = "//android.view.View[@index='2']")
public WebElement newUser;
@CacheLookup
@AndroidFindBy(xpath = "//android.view.View[@index='4']")
public WebElement existingCustomer;
@CacheLookup
@AndroidFindBy(xpath = "//android.view.View[@text='Welcome To Bajaj Finserv']")
public WebElement welcomeText;
}
这是我的 OpenApplicationTest 类:
public class OpenApplicationTest extends Driver {
@Test(priority = 0)
public void openApplicationValidation() throws InterruptedException {
OpenApplication openApplication= new OpenApplication(driver);
openApplication.validatePageLoaded();
}
}
我遇到以下错误:
FAILED: openApplicationValidation
java.lang.NullPointerException
at com.datamato.pages.OpenApplication.validatePageLoaded(OpenApplication.java:34)
at com.datamato.tests.OpenApplicationTest.openApplicationValidation(OpenApplicationTest.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:645)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:822)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1130)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:782)
at org.testng.TestRunner.run(TestRunner.java:632)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
at org.testng.SuiteRunner.run(SuiteRunner.java:268)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
at org.testng.TestNG.run(TestNG.java:1064)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:113)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:206)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:177)
我应该怎么做才能纠正它?
最佳答案
下面是你的程序流程
OpenApplication 类对象调用参数化构造函数,即 OpenApplication(AppiumDriver<MobileElement> driver) { }
然后 super();
调用Driver类的构造函数
public Driver() {this.driver = super.getDriver();}
然后 super.getDriver();
方法调用 BaseSetup 类 getDriver
返回 androidDriver
的方法;
我几乎可以肯定的是 @BeforeClass
永远不会调用注释方法 androidDriver
未初始化。
// System.out.println("Driver in initdriver is : "+androidDriver); This must have not printed.
这可能不是一个好的解决方案,但您可以尝试按照 put initDriver
进行操作getDriver
中的方法以便可以在使用驱动程序之前对其进行初始化。
解决方案:
public AndroidDriver<MobileElement> getDriver() {
initDriver();
return androidDriver;
}
关于java - PageFactory 给出空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56262399/
我正在尝试使用 POM 创建一个测试框架,但每当我使用 PageFactory 时,它都会给出一个 NullPointerException。 我只是想打开应用程序并检查给定元素在页面上的位置。 这是
我正在用 C# 创建一个测试自动化框架。在项目的顶部,我有“使用 OpenQA.Selenium.Support.PageObjects;”,但是当我尝试引用 PageFactory.initElem
我正在我的页面对象模型自动化框架中实现 pagefactory。我现有的框架在没有 pagefactory 的情况下工作正常。现在我正在实现 pagefactory 来调用元素。我面临一个问题,即 P
我实现了一个 PageFactory BasePage 类,它保存测试页面的 webements。我在 BasePage 中为 WebDriver 驱动程序引用创建了一个构造函数 import org
我在 Java 中有这个带有 css 定位器的等待命令,然后单击它。 new WebDriverWait(driver, 10).until(ExpectedConditions.presence
我在一个页面上有多个元素,我想使用 PageFactory 初始化它们。 我试过使用下面的方法 @FindBy(xpath = "//*[contains(@class,'x-grid-tree-no
我最近开始使用 Selenium2 和页面对象模式 与 Page Factory 结合使用。我有声明的 WebElements @FindBy 由 PageFactory 初始化的注解,当 类被初始化
我正在尝试学习 PageFactory 模型。我明白当我们做 initElements 的时候,WebElements 位于。例如,我单击一个 web 元素,因此 DOM 中的其他 web 元素之一发
有没有办法通过作为另一个注释实现的动态等待来扩展 Selenium 页面模型。 .. 我已经实现了 wait4element() ,我只想将其添加为另一个注释,类似于 @FindBy 。 我该怎么做?
我动态生成的定位器取决于将从列表中选择哪个元素。 例如,这是我生成的 ID: Function:TableName:0:submenuAction 0 是计数器,表示从列表中选择第一个元素。计数器前后
我遵循页面对象模型,并使用基类,该类具有所有常见且可重用的方法,并为我的 Web 应用程序的每个页面提供单独的页面。 现在我正在尝试在 BasePage 中创建一个可以在其他页面中使用的方法。在每个页
我有一个问题。两者有什么区别: @FindBy(id= "submit-button") WebElement submitButton; public void submitClick() {
这个问题在这里已经有了答案: StaleElementReference Exception in PageFactory (3 个答案) 关闭 4 年前。 在使用 Pagefactory 时,我直
我只是想知道 PageFactory.initElements(driver, this) 的工作原理,它如何填充 searchSuggestions webElement 并且如果我不使用 thre
我正在使用 selenium 页面工厂。在使用任何 WebElements 时,我收到空指针异常。 import java.io.IOException; import org.openqa.sele
我正在尝试学习PageFactory模型。我理解这样一个事实:当我们执行 initElements 时,WebElements 就被定位了。举例来说,我单击了一个 Web 元素,因此 DOM 中的其他
我正在尝试学习PageFactory模型。我理解这样一个事实:当我们执行 initElements 时,WebElements 就被定位了。举例来说,我单击了一个 Web 元素,因此 DOM 中的其他
我正在尝试学习PageFactory模型。我理解这样一个事实:当我们执行 initElements 时,WebElements 就被定位了。举例来说,我单击了一个 Web 元素,因此 DOM 中的其他
我在 Visual Studio 2010 中收到警告消息:“从未分配字段”。我使用在运行时分配字段的 Webdriver PageFactory,如何抑制此消息? 这里是代码示例: public c
我试图在我的 Selenium 测试中使用 PageObject 设计模式,并且我有以下一组 Page 类: PageObject 基类,它跟踪 WebDriver 和站点的基 URL。它还具有私有(
我是一名优秀的程序员,十分优秀!