【问题标题】:JavaScript button can only be clicked once with selenium Webdriver使用 selenium Webdriver 只能单击 JavaScript 按钮一次
【发布时间】:2013-06-11 22:13:51
【问题描述】:

我正在尝试将 Selenium 与 JUnit 一起使用,但我无法完成我的测试,因为我的按钮执行似乎只发生了一次。这是一些代码:

    JQueryUITab navTab = new JQueryUITab(driver.findElement(By.cssSelector("nav ul.tabs")));

    try {
        navTab.selectTab("Tab1");
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        navTab.selectTab("Tab2");
    } catch (Exception e) {
        e.printStackTrace();
    }

    System.out.print(navTab.getSelectedTab()); 

控制台打印输出为"Tab1"。这个 JQueryUITab 对象是一个自定义对象。这是内部工作原理:

public String getSelectedTab() {
    List<WebElement> tabs = jQueryUITab.findElements(By.cssSelector("li.tab"));
    for (WebElement tab : tabs) {
        if (tab.getAttribute("class").equals("tab selected")) {
            return tab.getText();
        }
    }
    return null;
}

public void selectTab(String tabName) throws Exception {
    boolean found = false;
    List<WebElement> tabs = jQueryUITab.findElements(By.cssSelector("li.tab"));

    for (WebElement tab : tabs) {
        if(tabName.equals(tab.getText().toString())) {
            tab.click();
            found = true;
            break;
        }
    }

    if (!found) {
        throw new Exception("Could not find tab '" + tabName + "'");
    }
}

没有抛出异常。至少在这部分代码之前或之前。

【问题讨论】:

    标签: java selenium junit


    【解决方案1】:

    我的实现有几个问题。首先,它可以通过不选择li.tab 对象,而是选择其中的a 类来改进。从那里开始,有 2 个解决方案对我有用。首先是使用

    webElement.sendKeys(Keys.ENTER);
    

    第二个(恕我直言更优雅的解决方案)是获取控制该对象的 selenium 驱动程序对象的实例,然后让它执行单击选项卡的命令。这是完整的更正方法。

        public void selectTab(String tabName) throws Exception {
            boolean found = false;
            List<WebElement> tabs = jQueryUITab.findElements(By.cssSelector("li.tab a"));
            for (WebElement tab : tabs) {
                if(tabName.equals(tab.getText().toString())) {              
    //              tab.sendKeys(Keys.ENTER);
                    WrapsDriver wrappedElement = (WrapsDriver) jQueryUITab;
                    JavascriptExecutor driver = (JavascriptExecutor) wrappedElement.getWrappedDriver();
                    driver.executeScript("$(arguments[0]).click();", tab);          
                    found = true;
                    break;
                }
            }
    
            if (!found) {
                throw new Exception("Could not find tab '" + tabName + "'");
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 2020-09-04
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多