2013-06-11 70 views
0

我正在嘗試使用SeUnium和JUnit,我在完成我的測試時遇到了問題,因爲它好像我的按鈕執行只發生一次。這裏的一些代碼:JavaScript按鈕只能用硒點擊一次Webdriver

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

沒有拋出異常。至少在代碼的這一部分之前或之中。

回答

0

我的實施出現了一些問題。首先,它可以通過選擇不是li.tab對象,而是其中的a類來改進。從那裏,有2個解決方案爲我工作。首先是使用

webElement.sendKeys(Keys.ENTER); 

和第二(恕我直言更好的解決方案)是讓硒驅動程序對象控制對象的實例,然後讓它執行命令單擊該選項卡。這是完整的更正方法。

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