【问题标题】:selenium dynamically click li itemselenium 动态点击 li 项
【发布时间】:2015-03-02 11:06:38
【问题描述】:

我正在尝试动态搜索“li”标签项并双击此网站:www.jstree.com(右上角的层次结构树示例)。代码确实找到了 WebElement,但没有做任何事情。我正在尝试如下。有人可以指出我做错了什么吗?我正在使用 Firefox 35.0.1 和 selenium 2.44.0。

    driver.get(baseUrl + "http://www.jstree.com/");
    WebElement we = driver.findElement(By.xpath("/html/body/div/div/div[1]/div[1]/div[2]/div[1]/ul/li[1]/ul"));
    Actions action = new Actions(driver);

    List<WebElement> liItems = we.findElements(By.tagName("li"));
    for(WebElement liItem:liItems)
    {
        System.out.println(liItem.getText());
        if(liItem.getText().startsWith("initially open"))
        {           
            System.out.println("Found it...");
            liItem.click();
            action.moveToElement(liItem).doubleClick().build().perform();
            break;
        }
    }

【问题讨论】:

  • 该页面有 38 li(s)。你的目标是哪一个?另外,您写的xpath 没有指向任何li 它是ul 而且,您想要通过双击而不是单击的原因是什么?
  • 而且,firefox 35 和 selenium 2.44 不能很好地配合使用 - 将 selenium 升级到 2.45 或将 Firefox 降级到 34.0.5。
  • @Saifur:我的目标是右上角的层次结构树。双击的原因是我有另一棵树,只有双击才能打开。
  • @alecxe:谢谢。我会试试的。
  • 我在 35.0.1 上尝试过 2.45 但没有帮助。

标签: java search selenium selenium-webdriver html-lists


【解决方案1】:

我最终这样做了:

修改了选择器以确保只返回预期的元素。它在执行时间和减少不需要的循环数量方面有很大帮助。然后,在运行时找到该元素并在其上使用Action() 执行双击。我还更新了@alecxe 建议的Selenium 绑定以使用最新的Firefox

public void DemoTest() throws InterruptedException {

        List<WebElement> liItems = driver.findElements(By.xpath("//*[contains(text(),'initially open')]"));

        for(WebElement liItem:liItems)
        {
            Actions actions = new Actions(driver);
            actions.moveToElement(liItem).doubleClick().build().perform();
        }
    }

【讨论】:

  • 太棒了。奇迹般有效。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 2016-04-07
  • 2021-04-03
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多