使用JQuery选择并标识元素以在Selenium2JavaAPI中使用它

使用JQuery选择并标识元素以在Selenium2JavaAPI中使用它,java,jquery,selenium,selenium-webdriver,Java,Jquery,Selenium,Selenium Webdriver,情况就是这样: 我使用Selenium 2的JavaAPI来打开和控制firefox浏览器实例 我通过JavaScript执行将jQuery脚本加载到页面 然后,我使用jQuery表达式选择元素并遍历DOM树 现在是我的问题,我能为每个找到的元素找到一个唯一的标识符吗?我的目标是通过使用Xpath或CSS选择器来使用Selenium获得相同的元素。因此,如果我能为jQuery中的元素生成一个明确的选择器,那将是非常困难的。其他想法也很受欢迎 我需要一种自动识别jQuery中元素的方法,可以将其转

情况就是这样:

我使用Selenium 2的JavaAPI来打开和控制firefox浏览器实例 我通过JavaScript执行将jQuery脚本加载到页面 然后,我使用jQuery表达式选择元素并遍历DOM树 现在是我的问题,我能为每个找到的元素找到一个唯一的标识符吗?我的目标是通过使用Xpath或CSS选择器来使用Selenium获得相同的元素。因此,如果我能为jQuery中的元素生成一个明确的选择器,那将是非常困难的。其他想法也很受欢迎


我需要一种自动识别jQuery中元素的方法,可以将其转换为Selenium元素/定位器

/编辑

更清楚地说:

如果我在jQuery中选择了一个元素:

webDriver.executeScript("var element = $('#myDiv input.test')");
现在,我想要这样的东西:

WebElement webElement = webDriver.executeScript("return element");

这可能吗?

不确定您的确切问题,但您可以使用html id、名称、类等属性构建定位器

我找到了解决方案,非常简单:

String jQuerySelector = "'#myDiv input.test'";
RenderedWebElement webElement = (RenderedWebElement) ((JavascriptExecutor) webDriver).executeScript("return $(" + jQuerySelector+ ").get(0);");
在jQuery中使用Selenium中先前选择的元素也可以:

String jQuerySelector = "arguments[0]";
((JavascriptExecutor) webDriver).executeScript("return $(" + jQuerySelector+ ").doSomethingInJquery();", webElement);

使用eval更容易。将[0]之类的索引选择器与jQuery代码一起使用,否则它将返回元素集合

    String elementLocator = "$('#btnID')[0]";
    public RemoteWebElement getElementByJQueryLocator(String jQueryLocator){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        RemoteWebElement element = (RemoteWebElement) js.executeScript("return eval(arguments[0]);", jQueryLocator);
        return element;
    }

        RemoteWebElement webElement = getElementByJQueryLocator(elementLocator);
        webElement.click();

我知道。但是,有没有一种自动方法可以始终为我提供一个有效的定位器来查找我在jQuery中选择的元素?我不知道jQuery,我想Selenium没有这种自动方法。我需要一种自动方法来识别jQuery中的元素,它可以转换为Selenium元素/定位器。这基本上是这个问题的另一个方向:对于使用RenderedWebElement接口,应该在Java中导入哪个包?它可能已更改为WebElement我在使用Java的WebDriver中的jQuery时遇到以下错误:org.openqa.Selenium.WebDriverException:$is未定义警告:服务器未提供任何stacktrace信息命令持续时间或超时:915毫秒。。。如何解决这个问题?前面的代码:jse.executeScript$'gbqfq'。单击;;根据您的指示,当前代码是:jse.executeScriptjQuery'gbqfq'。单击;;我说的对吗?很抱歉,同样的问题:org.openqa.selenium.WebDriverException:jQuery未定义警告:服务器未提供任何stacktrace信息命令持续时间或超时:4.29秒。jQuery有任何配置吗?在以上所有答案中,这是唯一有效的。谢谢你,伙计!