java - 如何使用 selenium webdriver 找到这个元素?

标签 java selenium selenium-webdriver testing

这应该很简单,但我显然遗漏了一些东西:

<div>
    <label>
        Scenario
        <select id="scenarios">
            <option value="0">Default (Visa)</option>
            <option value="1">Secondary (Amex)</option>
        </select>
        <button onclick="pickScenario()">Select</button>
    </label>

    <label style="padding-left: 2em;">
        Custom Amount: $
        <input type="text" id="custom_amount">
    </label>
</div>

尝试使用以下代码定位三个元素(scenarioDropdown、selectButton、customAmount)中的任何一个时,我不断收到 NullPointerExceptions 返回。我已经使用 id、xpath 和 css 尝试了所有这三种方法,但下面我将针对每个元素展示一种方法:

  @FindBy(css = "#scenarios")
  private WebElement scenariosDropdown;

  @FindBy(xpath = "//button[contains(.,'Select')]")
  private WebElement select;

  @FindBy(how = How.ID, using = "custom_amount")
  private WebElement customAmount;

  private WebDriver driver;

  public void selectScenario(String scenario) {

    Select select = new Select(scenariosDropdown);
    select.deselectAll();
    select.selectByVisibleText(scenario);
  }

  void clickSelect() {
    select.click();
  }

  public void enterCustomAmount(String amount) {
    customAmount.clear();
    customAmount.sendKeys(amount);
  }

运行使用以下方法的测试。

  public void testWhileBroken() {

    // select Scenario Two
    cc.selectScenario("Secondary (Amex)");

    // enter a Custom Amount
    cc.enterCustomAmount("1.23");

    // click Select
    cc.clickSelect();

  }

它返回:

Aug 16, 2017 9:07:16 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: OSS

java.lang.NullPointerException at org.openqa.selenium.support.ui.Select.(Select.java:44) at apps.web.modules.staplespay.CreditCardsScreen.selectScenario(CreditCardsScreen.java:27)

我在这里错过的最明显的事情是什么?

最佳答案

我觉得你的 testWhileBroken() 方法不错。 (假设类名是 ABC.class)

但是您在 org.openqa.selenium.support.ui.Select.(Select.java:44) 中遇到 java.lang.NullPointerException 的原因是因为在您的 PageFactory 类(让我们假设类名称是 XYZ.class)您只将 WebDriver 的实例声明为:

private WebDriver driver;

PageFactoryPOM而言,我们必须在测试类中初始化页面对象(即在 ABC.class 中)通过调用传递 WebDriver< 实例的 initElements() 方法driver 作为参数如下:

//ABC.class
@Test (priority=2)
public void method_name()
{
    //Initialize page objects
    XYZ xyz = PageFactory.initElements(driver, XYZ.class);

    //Call the method
    xyz.my_method();
}

现在,在页面对象类中(即在 XYZ.class 中)除了声明 WebDriver 的实异常(exception),您还必须定义一个构造函数,如下所示:

//XYZ.class
WebDriver driver;

//constructor
public XYZ(WebDriver XYZDriver)
{
    this.driver=XYZDriver;
}

这将处理 NullPointerException

关于java - 如何使用 selenium webdriver 找到这个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45714661/

相关文章:

java - 使用相同数据调用方法时出错(总是生成新数据)

java - 如果 HashMap 包含key(字符串的任何部分)

java - Android - 获取键盘按键

Java - 在巨型列表中追加和删除的最佳策略?

java - 使用 Selenium IDE 进行作业调度

Java - 如何打开 URL 并插入 URL 用户和密码?

java - HQL 中的 Left Join - Hibernate 查询

linux - 无法使用 Linux 在 chrome 上执行 nightwatch 测试

python - Chrome 版本自动安装 Chrome 驱动

java - 我想在使用窗口句柄时拆分存储在字符串中的值