Selenium WebDriver - 无法使用 PageObjectModel 访问或单击元素

问题描述

我在 Selenium 中使用页面对象模型定义了 Web 元素。从测试方法来看,当我尝试访问或对这些网络元素执行任何操作时,我的测试会完全跳过它并完成,没有错误

public class HomePage extends Base{

@FindBy(xpath="//button[@id='sparkButton']")
    public WebElement menuDropDown;

public HomePage(){
        PageFactory.initElements(driver,this);
    }

public void clickHomepagemenuDropDown() {
        menuDropDown.click();
        System.out.println("Print HELLO");
   }
}


public class Test1 extends Base{

  HomePage homepage = new HomePage() ;
  @Test(priority=1)
  public void homePage() throws Exception {
    try {
      //do something
        homepage.clickHomepagemenuDropDown();
      //print something
       }catch (Exception e) {
               System.out.println (e);
                  return;
       }

}

如果我替换 homepage.clickHomepagemenuDropDown(); 使用以下几行,我的程序将运行良好。

WebElement mdd = driver.findElement(By.xpath("//button[@id='sparkButton']"));
mdd.click();

是否有一些我遗漏的设置?

更正捕获消息后更新-- 我得到以下空异常 无法调用“org.openqa.selenium.SearchContext.findElement(org.openqa.selenium.By)”,因为“this.searchContext”为空

解决方法

在您的 Test1 类中,您使用字段初始化来初始化 HomePage 类,因此 @FindBy(xpath="//button[@id='sparkButton']") 找不到网络元素。当您在测试方法中调用 clickHomepagemenuDropDown() 时,它会抛出异常并进入 catch 块。在您刚刚编写的 catch 块中,return。出于这个原因,测试跳过并完成,没有错误。我认为您应该在测试方法中初始化页面对象。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...