我正在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>
答案 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);