当前位置: 首页 > 知识库问答 >
问题:

如何使用鼠标悬停动作在页面对象模型类Java?

狄英哲
2023-03-14

我正在练习slenium-java与页面对象模型和testNG。我试图在spicejet网站做注册场景。我可以很容易地去网址,但要注册,我们必须切换登录/注册按钮,然后我们必须单击注册。我试图在我的一个页面对象类中执行鼠标悬停操作,但这是一个给定错误。

我已经尝试在主页中初始化action类,而不是page对象类,但也没有产生任何结果。

页面对象类

package ObjectRepository;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;

public class LoginPage {

    WebDriver driver;

    public LoginPage(WebDriver driver) {

        this.driver=driver;
        PageFactory.initElements(driver, this);
    }

    Actions action = new Actions(driver);

    By xpath = By.id("ctl00_HyperLinkLogin");
    By xpath1 = By.xpath("//*[contains(text(), 'Sign up')]");
    By Password = By.id("pass");
    By Login = By.xpath("//*[@type='submit']");

    public void login() {
         action.moveToElement(driver.findElement(xpath)).moveToElement(driver.findElement(xpath1)).click().build().perform();
    }

    public WebElement signUp() {
        return driver.findElement(xpath1);
    }

    public WebElement pwd() {
        return driver.findElement(Password);
    }

    public DashBoard submit() {
         driver.findElement(Login).click();
        return new DashBoard(driver);
    }


}

主类

package TestCases;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.testng.annotations.Test;

import ObjectRepository.DashBoard;
import ObjectRepository.Data;
import ObjectRepository.LoginPage;

public class MainClass {

    @Test
    public void A() {

        System.setProperty("webdriver.chrome.driver", "D:\\drivers_selenium\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();

        driver.get("https://www.spicejet.com/");

        LoginPage lp = new LoginPage(driver);
        lp.login();
        lp.signUp().click();

    }

}

错误消息

java.lang.NullPointerException
    at java.util.Objects.requireNonNull(Unknown Source)
    at org.openqa.selenium.interactions.Actions.<init>(Actions.java:65)
    at ObjectRepository.LoginPage.<init>(LoginPage.java:17)
    at TestCases.MainClass.A(MainClass.java:23)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:100)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:646)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:811)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1137)
    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:753)
    at org.testng.TestRunner.run(TestRunner.java:607)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:368)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:363)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:321)
    at org.testng.SuiteRunner.run(SuiteRunner.java:270)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1284)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1209)
    at org.testng.TestNG.runSuites(TestNG.java:1124)
    at org.testng.TestNG.run(TestNG.java:1096)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:236)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:81)

这是我收到的错误信息。

共有1个答案

公孙令秋
2023-03-14

有两个问题需要解决,

第1页-创建对象。必须像这样传递驱动程序对象,

LoginPage lp = new LoginPage(driver);

LoginPage类上的第二个构造函数。构造函数的名称应与类名相同。

public LoginPage(WebDriver driver) {

        this.driver=driver;
        PageFactory.initElements(this.driver, this);
    }

将操作移动到登录方法中

public void login() {

Actions action = new Actions(driver);
    action.moveToElement(driver.findElement(xpath)).moveToElement(driver.findElement(xpath1)).click().build().perform();
    }
 类似资料:
  • 问题内容: 有时,我可以选择使用CSS元素:悬停或JavaScript onmouseover来控制页面上html元素的外观。考虑以下情况,其中div包装了输入 我希望输入将鼠标光标悬停在div上时更改背景色。CSS方法是 JavaScript方法是 每种方法的优点和缺点是什么?CSS方法是否适用于大多数Web浏览器?JavaScript比CSS慢吗? 问题答案: :hover的问题是IE6仅在链

  • 我有一系列使用d3创建的行。我写了一些和事件事件。 当I时,事件通过增加行的值正常工作。 但是在上,在我编写代码的地方,事件不能正常工作,将值设置为初始值。 小提琴 帮我修一下。

  • 问题内容: libgdx中是否有任何侦听器可以让我检测到鼠标悬停而不是鼠标悬停。在场景2D的按钮类中,您有2种方法isOver和isPressed,但是它们执行相同的操作…还有其他问题吗?还有另一种方法来检测鼠标悬停在actor上吗? 问题答案: 还有的可以连接到和它提供的事件,如下面的: 该事件从根本上来说意味着鼠标开始悬停在角色上,意味着它“离开”了角色的区域。它还有一个事件,您可以使用该事件

  • 问题内容: 全屏是提供全屏框架的另一类。JButton上面有ImageIcon。bg1.png是背景图像 问题 是这些JButton仅在鼠标悬停时才可见,否则它们不出现。 问题答案: 您可能会遇到布局问题,在该问题中,您尝试将具有绝对界限的JButton添加到使用非null布局管理器的容器中。意见建议 不要使用setBounds和绝对定位来调整和放置组件。 阅读并使用布局管理器为您完成繁重的工作:

  • 本文向大家介绍赛普拉斯将鼠标悬停在动作上,包括了赛普拉斯将鼠标悬停在动作上的使用技巧和注意事项,需要的朋友参考一下 鼠标悬停操作在网页中非常常见,一旦我们将鼠标悬停在其上,就会看到一个元素列表。赛普拉斯不像Selenium这样的其他自动化工具那样支持鼠标悬停操作,因为它认为它很脆弱。 赛普拉斯应操纵DOM元素以执行鼠标悬停动作。赛普拉斯采用了JQuery中的method的帮助。的节目()方法的显示

  • 问题内容: 似乎这是在webdriver中(至少在Java api中)进行悬停/鼠标悬停的方法: Python API中有可能吗?用于python的webdriver api文档似乎未提及任何类似内容。 http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html 如何在python webdriver中进行悬停/鼠标悬停? 问题答