小编典典

找出类名是否包含某些文本

selenium

作为测试的一部分,该系统应该确定用于打开网站的设备是移动设备还是普通台式机。

我不断收到错误:

“ InvalidSelectorError:无法使用xpath表达式// * [包含(@class,is-mobile …

萤火虫的属性:

<body class="login-page is-desktop">

我的测试:

public class isMobile {

public static boolean isMobile = false;

public static boolean checkIfMobile(WebDriver driver) throws Exception {

    List<WebElement> list = driver.findElements(By
            .xpath("//body[contains(@class, 'is-mobile'"));
    if (list == null) {
        return false;
    } else {
        return true;
    }
}
}

有人可以告诉我正确的XPath应该是什么吗?


阅读 266

收藏
2020-06-26

共1个答案

小编典典

您似乎缺少右括号和右括号:

更改此:

//body[contains(@class, 'is-mobile'

变成这个:

//body[contains(@class, 'is-mobile')]

附带说明一下,请考虑到此代码还有另一个隐蔽的问题,那就是您将匹配不希望匹配的内容,例如此类class属性:login-page not-is- mobile

无法像使用CSS3选择器那样简单地进行匹配[class~="is-mobile"]。但是,您可以这样做:

//body[contains(concat(' ', @class, ' '), ' is-mobile ')]

所有这些空格都在其中,以确保您只会在空格之间匹配某些内容,即使它位于class属性的开头或结尾,也要匹配。

这确实很丑陋,但这就是XPath的实现方式。

2020-06-26