7

这是这种情况:

  • 我使用 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");

那可能吗?

4

3 回答 3

11

我找到了解决方案,这很容易:

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);
于 2011-04-15T00:44:23.337 回答
1

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

    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();
于 2018-06-06T13:46:45.390 回答
0

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

于 2011-03-31T07:51:07.430 回答