![](/img/trans.png)
[英]Does Java guarantee that Object.getClass() == Object.getClass()?
[英]Cannot invoke "Object.getClass()" because "object" is null - Java16
我正在尝试为学习目的设置一个 Appium 项目。 我已经创建了框架的基本结构,但它抛出了以下错误:
net.serenitybdd.core.exceptions.StepInitialisationException:无法为 TestAppPage 创建步骤库:无法调用“Object.getClass()”,因为“object”为 null
以下是我的一些项目类:
测试应用页面.java:
package pages;
import io.appium.java_client.pagefactory.AndroidFindBy;
import io.appium.java_client.pagefactory.iOSXCUITFindBy;
import net.thucydides.core.annotations.Step;
import org.openqa.selenium.WebElement;
public class TestAppPage extends AppiumBaseScreen {
@AndroidFindBy(id ="IntegerA")
@iOSXCUITFindBy(accessibility = "IntegerA")
private WebElement txtFirstNumberField;
@AndroidFindBy(id ="IntegerB")
@iOSXCUITFindBy(accessibility = "IntegerB")
private WebElement txtSecondNumberField;
@AndroidFindBy(id ="ComputeSumButton")
@iOSXCUITFindBy(accessibility = "ComputeSumButton")
private WebElement btnComputeSum;
@AndroidFindBy(id ="Answer")
@iOSXCUITFindBy(accessibility = "Answer")
private WebElement lblSumResults;
@Step("Enter 1st number")
public void enterFirstNumber(int number) {
setText(String.valueOf(number), txtFirstNumberField);
}
@Step("Enter 2nd number")
public void enterSecondNumber(int number) {
setText(String.valueOf(number), txtSecondNumberField);
}
@Step("Press sum button")
public void pressSumButton() {
btnComputeSum.click();
}
@Step("Return sum of numbers")
public String getSumOfNumbers() {
return lblSumResults.getText();
}
}
AppiumBaseScreen.java:
package pages;
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.PageFactory;
import static driver.DriverBase.getAppiumDriver;
public class AppiumBaseScreen {
public AppiumBaseScreen() {
PageFactory.initElements(new AppiumFieldDecorator(getAppiumDriver()), this);
}
protected void setText(String text, WebElement element) {
click(element);
element.clear();
element.sendKeys(text);
}
protected void click(WebElement element) {
moveFocusOnElement(element);
element.click();
}
protected void moveFocusOnElement(WebElement element) {
new Actions(getAppiumDriver()).moveToElement(element).perform();
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.appiumpractice</groupId>
<artifactId>AppiumPractice</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>16</maven.compiler.source>
<maven.compiler.target>16</maven.compiler.target>
<serenity.version>3.2.5</serenity.version>
<serenity.cucumber.version>3.2.5</serenity.cucumber.version>
<cucumber.version>7.3.3</cucumber.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>net.serenity-bdd.maven.plugins</groupId>
<artifactId>serenity-maven-plugin</artifactId>
<version>${serenity.version}</version>
<executions>
<execution>
<id>serenity-reports</id>
<phase>post-integration-test</phase>
<goals>
<goal>aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-cucumber</artifactId>
<version>${serenity.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-random-core</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.2</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.github.javafaker</groupId>
<artifactId>javafaker</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
</project>
驱动程序库.java:
package driver;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.options.XCUITestOptions;
import io.appium.java_client.safari.options.SafariOptions;
import java.net.URL;
public class DriverBase {
private static AppiumDriver driver;
public static void initializeDriver(URL appiumURL, XCUITestOptions capabilities) {
initIOSDriver(appiumURL, capabilities);
}
public static void initializeDriver(URL appiumURL, SafariOptions capabilities) {
initIOSDriver(appiumURL, capabilities);
}
public static AppiumDriver getAppiumDriver() {
return driver;
}
private static void initIOSDriver(URL appiumURL, XCUITestOptions capabilities) {
driver = new IOSDriver(appiumURL, capabilities);
}
private static void initIOSDriver(URL appiumURL, SafariOptions capabilities) {
driver = new IOSDriver(appiumURL, capabilities);
}
public static void closeDriver() {
driver.close();
driver.quit();
}
}
当我尝试使用页面工厂与元素交互时出现上述错误:
element.sendKeys(text);
如果我使用以下代码,一切正常
driver.findElement(element).sendKeys(userName);
通过以下两件事解决了此问题:
添加以下依赖
<dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.3.0</version> </dependency>
降级到 Java 11
这是一个版本问题,尝试将 JDK 降级到 11 这解决了我的问题。 希望它也能解决你的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.