2013-05-14 17 views
2

在我的應用程序中,我有一個網格與複選框的列。每行的複選框的ID僅與固定值後的數字不同。 xxxx_0,xxxx_1,...運行時錯誤,同時強調WebDriver複選框

要選擇任意行中的複選框,可以追加行號以獲取完整的ID。

我的代碼是這樣的:

for(int i=0; i<10; i++) { 
    CheckBox visible = (CheckBox) driver.findElement(By.id("visibleCheckboxValue_" + i)); 
    visible.toggle(false); 
} 

這給了我一個運行時錯誤爲「不能施放遠程的webdriver到複選框。」

此外,如果我使用它作爲WebElement,我不能使用toggle(boolean select)函數。

for(int i=0; i<10; i++) { 
    WebElement visible = (WebElement) driver.findElement(By.id("visibleCheckboxValue_" + i)); 
    if(visible.isSelected()) { 
     visible.click() // To uncheck the check box 
    } 
} 

在一個WebElement,我可以用.isSelected()如果選擇或不復選框來檢查,但它始終返回false。即使選中該複選框,它也會返回false。

是否有任何方法將Webdriver轉換爲CheckBox,以便我可以有效地使用toggle()函數?

回答

1

那麼你正在考慮這個錯誤的方式。

你不能將它投到CheckBox,我不希望你!這是與另一個API集成,Selenium不這麼做!你不應該從.findElement()投下結果!

您需要考慮爲什麼您無法使用內置功能,而不是關於如何將它打包成不同的對象。

我建議的第一件事是明確檢查你正在帶回的元素的「檢查」值。

checkbox是在HTML checked,它可以在不同量的不同的方式來設置,看到有關「正確」的方式複選框設置爲checkedthis StackOverflow的問題。在這裏,你應該能夠看到它不是一個簡單的案例yesno

因此請檢查該元素上的checked狀態爲何值。我不會爲你做,這不是學習的點,而是僞代碼:

WebElement checkBox = driver.findElement(driver.findElement(By.id("visibleCheckboxValue_" + i)); 
string checkedStatus = checkBox.getAttribute("checked"); 
// now do some checking...ie. does that string now contain something? yes? it's checked. 

現在你應該能夠使用.isSelected方法,但在此之前,我們再往前走,看看上面的工作。如果是這樣,那很好,但是這意味着其他地方會出現某些問題如果不是,那麼你也應該提供你的HTML(以及任何可能相關的JS和CSS),以便我們可以有效地診斷你的問題。