簡體   English   中英

使用Selenium Webdriver只能單擊一次JavaScript按鈕

[英]JavaScript button can only be clicked once with selenium Webdriver

我正在嘗試將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 + "'");
    }
}

沒有拋出異常。 至少與代碼的這一部分有關。

我的實現存在幾個問題。 首先,可以通過不選擇li.tab對象,而是選擇其中的a類來改進它。 從那里開始,有2種解決方案對我有用。 首先是使用

webElement.sendKeys(Keys.ENTER);

第二個(imho更優雅的解決方案)是獲取控制該對象的硒驅動器對象的實例,然后使其執行命令以單擊選項卡。 這是完整的更正方法。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM