0

JUnit で Selenium を使用しようとしていますが、ボタンの実行が 1 回しか行われていないように見えるため、テストを完了できません。コードの一部を次に示します。

    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 + "'");
    }
}

スローされる例外はありません。少なくとも、コードのこの部分の前またはこの部分に関連しています。

4

1 に答える 1

0

私の実装にはいくつかの問題がありました。まず、li.tabオブジェクトではなく、そのa中のクラスを選択することで改善できた可能性があります。そこから、私のために働いた2つの解決策がありました. 最初に使用していた

webElement.sendKeys(Keys.ENTER);

2つ目(よりエレガントなソリューション)は、オブジェクトを制御するセレンドライバーオブジェクトのインスタンスを取得し、それを取得してコマンドを実行してタブをクリックすることでした。これが完全に修正された方法です。

    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 + "'");
        }
    }
于 2013-06-12T18:22:44.513 に答える