使用JQuery选择和识别元素以在Selenium 2 Java API中使用它

情况就是这样:

  • 我使用Selenium 2的Java API来打开和控制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"); 

那可能吗?

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

 String jQuerySelector = "'#myDiv input.test'"; RenderedWebElement webElement = (RenderedWebElement) ((JavascriptExecutor) webDriver).executeScript("return $(" + jQuerySelector+ ").get(0);"); 

在Selenium中使用的jQuery元素也可以使用:

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

不确定您的确切问题,但您可以使用html id,name,class etc.属性构建定位器。

使用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();