微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Selenium Webdriver JQUERY

我对Selenium WebDriver非常新鲜,我正在学习Selenium WebDriver,了解如何使用jQuery选择器来处理元素而不是XPath表达式,ID等…

可以帮助我提供链接,在那里我可以找到关于如何在Selenium WebDriver中使用jQuery的基本信息?

解决方法

你没有 JQuery选择器提供了大多数CSS 2和CSS 3选择器所做的工作,还有更多的东西,但你可能没有它可以生活.如果你知道JQuery选择器,你已经知道了CSS选择器.

使用可以使用的CSS选择器,并使用XPath表达式(它们更强).我怀疑你会发现很多真正的用法,其中两个是不够的(然后,通常的方法是得到你可以和迭代的集合,手动过滤结果).

也就是说,您可以强制WebDriver接受JQuery选择器:

如果您只想支持一个或两个浏览器,最简单的方法可能是写入一个简单的插件到该浏览器,如果它不存在,将注入JQuery到每个页面.然后,您将强制此插件由您使用的浏览器使用.

如果你想支持所有的浏览器,那么这个解决方案很快就成了一个负担,你可以做的最好的就是编写一个WebDriver的装饰器,它将尝试在任何findElements()和/或executeScript()调用之前将JQuery注入到页面中如果它还没有出现

请参阅this question了解有关注入JQuery的想法.

注入后,您可以再次使用JavaScript,只能使用它:

// earlier
if (driver instanceof JavascriptExecutor) {
    js = (JavascriptExecutor)driver;
} else {
    throw new IllegalStateException("This driver cannot run JavaScript.");
}

WebElement element = (WebElement)js.executeScript("$('div.account').get(0)");
// or
List<WebElement> elements = (List<WebElement>)js.executeScript("$('div.account').get()");

您可以轻松地将这些行包装到您的装饰WebDriver的新的By对象或新的findElement(String jQuerySelector)方法中(如果需要),但这取决于您的方便和懒惰,我们可以使用它

我认为最好的方法是创建一个名为ByJQuery的新的By实现.请参阅this answer关于如何制作ByJavaScript – 它是从那里重用它的一小步,将JQuery注入页面并运行实际的查询.

class ByJQuery extends By implements Serializable {
    private final String query;

    public ByJQuery(String query) {
        checkNotNull(query,"Cannot find elements with a null JQuery expression.");
        this.query = query;
    }

    @Override
    public List<WebElement> findElements(SearchContext context) {
        WebDriver driver = getWebDriverFromSearchContext(context);

        if (!isJQueryInThisPage(driver)) {
            injectJQuery(driver);
        }

        return new ByJavaScript("return $(" + query + ")").findElements(context);
    }

    private static WebDriver getWebDriverFromSearchContext(SearchContext context) {
        if (context instanceof WebDriver) {
            return (WebDriver)context;
        }
        if (context instanceof WrapsDriver) {
            return ((WrapsDriver)context).getWrappedDriver();
        }
        throw new IllegalStateException("Can't access a WebDriver instance from the current search context.");
    }

    private static boolean isJQueryInThisPage(WebDriver driver) {
        // Todo Some JavaScript test for a JQuery object.
    }

    private static void injectJQuery(WebDriver driver) {
        // Todo Load JQuery from a file,inject it into the page via JS.
    }

    @Override
    public String toString() {
        return "By.jQuery: \"$(" + query + ")\"";
    }
}

原文地址:https://www.jb51.cc/jquery/176358.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐