JavaScript按钮只能使用selenium Webdriver单击一次

时间:2013-06-11 22:13:52

标签: java selenium junit

我正在尝试使用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 + "'");
    }
}

没有抛出异常。至少在代码之前或之前有关。

1 个答案:

答案 0 :(得分:0)

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

webElement.sendKeys(Keys.ENTER);

和第二个(imho更优雅的解决方案)是获取控制对象的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 + "'");
        }
    }