无法使用Selenium获取WebElement标记名称

时间:2019-02-15 15:36:26

标签: java selenium-webdriver xpath

我有一个弹出页面,需要单击一个按钮。弹出页面位于Angular中。

我需要单击的按钮是:

<button _ngcontent-c8="" class="btn btn-primary" type="button">Apply</button>

方法调用单击按钮所采用的路径如下:

TemplatePopupPage templatePopupPage = editTemplatePage.clickApplyToClientsButton();
pause(5000);
editTemplatePage = templatePopupPage.clickApplyButton(EditTemplatePage.class);

@SuppressWarnings("unchecked")
public <W> W clickClientSearchApplyButton(Class<W> expectedPage) throws Exception {
    click(clientsApplyButton);
    pause(2000);

    return (W) expectedPage.getConstructors()[0].newInstance();
}

protected void click(WebElement element) {
    String tagName = element.getTagName();
    String attributeType = element.getAttribute("type");
    if (tagName.equals("input")
            && (attributeType.equals("submit"))) {
        element.submit();
        return;
    }
    element.click();
}

public interface WebElement {
   void click();
}

我尝试了几个xpath,它们都成功指向了按钮,例如:

@FindBy(xpath = "//div[@class='modal-footer']/button[text()='Apply']")
protected WebElement clientsApplyButton;

在click()方法的String tagName = element.getTagName();行中一直失败。 错误消息是java.lang.NullPointerException

我认为这不是XPath的问题,因为当我检查页面时,XPath会在页面上找到元素。现在,该xpath存在其他元素。

我觉得它与 _ngcontent-c8 属性有关,因为我可以使用相同的click()方法

单击其他页面上的按钮。

2 个答案:

答案 0 :(得分:0)

也许您可以尝试:@FindBy(xpath = "//div[@class='modal-footer']/button[con]") protected WebElement clientsApplyButton;

答案 1 :(得分:0)

我可以在IDE中尝试一下,可以解决问题。这是屏幕截图

code screentshot