硒moveTo()中的空指针,但我无法弄清楚什么是空

时间:2018-06-19 11:38:16

标签: selenium nullpointerexception

我正在Java中使用Selenium中的Page Object。我拥有的一个要素是:

private static final String ACTION_TABLE_X = "//table";
private static final String ACTION_HEAD_X = ACTION_TABLE_X + "/thead";
private static final String ACTION_BODY_X = ACTION_TABLE_X + "/tbody";
private static final String ACTION_HEADERS_X = ACTION_HEAD_X + "//th";
private static final String ACTION_ROWS_X = ACTION_BODY_X + "/tr";

@FindBy(xpath = ACTION_ROWS_X)
private List<WebElement> actionRows;

稍后在我的代码中,我有一个有效行(索引== 0):

WebElement row = actionRows.get(index);

从Selenium调试器获取行:“ [[[ChromeDriver:XP上的Chrome(82fecb3b30e16fcd24a9ab0e4f0478da)]-> xpath:// table / tbody / tr]” (显示行不为空,并且不是“ :::的代理人”)

我创建一个动作

    Actions actions = new Actions(driver);
    action.moveToElement(signButton).click().build().perform();
    return getPage(driver, DocuSignDocumentSignaturePage.class);
再次从调试器中获取驱动程序: ChromeDriver:XP上的Chrome(82fecb3b30e16fcd24a9ab0e4f0478da)

然后执行以下操作: org.openqa.selenium.interactions.Actions@46ab18da

因此,简而言之,我的驱动程序为非null,我的元素为非null,我的动作为非null。但是,当我执行

action.moveToElement(signButton).click().build().perform();

我得到一个空指针错误。突出显示动作。.(signButton)显示空指针

我不知道为什么,因为没有什么是空的。我最初的想法是做事

signButton.click()

但是,尽管我确认xpath正确,但是它单击的是页面上方而不是我行中的过滤器按钮。

,当然,如果action.moveToElement(signButton)返回null,则 action.moveToElement(signButton).click()将引发错误。

任何人都知道发生了什么事吗? (如果有任何不同之处,请联系DocuSign。)

====

为按钮添加html

<button class="btn ng-binding btn-primary" ng-class="{
            'btn-primary': $props.current.main,
            'btn-secondary': !$props.current.main }" ng-click="component.trigger($props.current.key)" data-qa="status-action-button-sign">
        Sign
    </button>

1 个答案:

答案 0 :(得分:0)

看起来,您没有正确使用Actions类对象(使用action.moveToElement而不是actions.moveToElement)。

请检查以下内容

action.moveToElement(signButton).click().build().perform();需要更改为actions.moveToElement(signButton).click().build().perform();

其他

为避免错误,您可以如下更改对象名称

Actions builder= new Actions(driver);
builder.moveToElement(signButton).click().build().perform();
return getPage(driver, DocuSignDocumentSignaturePage.class);