Java Selenium WebElement element.findElements无法正常工作

时间:2018-06-20 12:59:39

标签: java selenium

我正在测试使用Java和Selenium的Web应用程序。我试图在页面上单击一个按钮,该页面上存在两个具有相同类名和文本的按钮。因此,我先找到父元素,然后在其子元素中寻找我的按钮。我正在执行以下操作,并得到了意外的结果。

public static List<WebElement> findSubElementsUsingHtmlXpathClass(String htmlElement,
        String className, WebElement parent) {
    String xPathString="//" + htmlElement + "[contains(@class, '" + className + "')]";

    List<WebElement> elements = parent.findElements(By.xpath(xPathString));
    return elements;
}

这将返回不属于父元素的元素。

这是我从以下位置拨打电话的地方:

String htmlElement = "div";
    String className = "tabs-container";
    List<WebElement> elements = Common.findElementsUsingHtmlXpathClass(driver, htmlElement, className);
    Common.myPrint(thisClass + " no of elements found: " + elements.size());
    for (WebElement element : elements) {
        // outerHTML: <input class="form-control btn btn-info" value="Create item"
        // type="button">
        // inner:
        String htmlElement2 = "input";
        String className2 = "form-control btn btn-info";
        String textToFind = "Create item";
        List<WebElement> subElements = Common.findSubElementsUsingHtmlXpathClass(htmlElement2, className2,
                element);HTML

我想念什么吗?

我已经能够解决此问题,只需忽略它返回的第一个元素,但这只能在特定情况下得到保证。

2 个答案:

答案 0 :(得分:2)

您的XPath需要进行如下更改(需要在双斜杠之前添加。)。您需要从当前父元素中选择子元素。因此,在Xpath中,。需要指定以将其指示为当前节点。

public static List<WebElement> findSubElementsUsingHtmlXpathClass(String htmlElement,
        String className, WebElement parent) {
    String xPathString=".//" + htmlElement + "[contains(@class, '" + className + "')]";

    List<WebElement> elements = parent.findElements(By.xpath(xPathString));
    return elements;
}

答案 1 :(得分:0)

尝试使用CSS-Selector代替XPath:

public static List<WebElement> findSubElementsUsingCSS(String className, WebElement parent) {
        String cssString="." + className;

        List<WebElement> elements = parent.findElements(By.cssSelector(cssString));
        return elements;
    }