2013-12-17 75 views
9

我的屏幕上有很多單選按鈕。當選擇一個單選按鈕時,它有一個檢查屬性。如果未選中單選按鈕,則檢查的屬性不存在。如果元素不存在,我想創建一個方法。如何使用Selenium WebDriver驗證元素中存在的屬性?

我使用硒webdriver和java。我知道我可以使用getSingleElement(XXX).getAttribute(XXX)來檢索屬性。我只是不確定如何驗證某個屬性不存在,並且在測試不存在時通過測試(如果存在則失敗)。

當單選按鈕被選中

<input id="ctl00_cphMainContent_ctl00_iq1_response_0" type="radio" name="ctl00$cphMainContent$ctl00$iq1$response" value="1" checked="checked"> 

當單選按鈕,不選中

<input id="ctl00_cphMainContent_ctl00_iq1_response_0" type="radio" name="ctl00$cphMainContent$ctl00$iq1$response" value="1"> 

我想測試通過。當檢查的屬性不存在

+0

當無線電按鈕被選中 <輸入的ID = 「ctl00_cphMainContent_ctl00_iq1_response_0」 類型= 「無線電」 名稱= 「ctl00 $ cphMainContent $ ctl00 $ IQ1 $響應」 值= 「1」 檢查=「檢查「> 當未選中的單選按鈕 <輸入的ID =」 ctl00_cphMainContent_ctl00_iq1_response_0" 類型= 「無線電」 名稱= 「ctl00 $ cphMainContent $ ctl00 $ IQ1 $響應」 值= 「1」> 我想要的測試通過當檢查屬性不存在 – TestRaptor

回答

13

您可以創建一個方法來正確處理它。注意以下是C#/ Java混合風格,你需要調整一下來編譯。

private boolean isAttribtuePresent(WebElement element, String attribute) { 
    Boolean result = false; 
    try { 
     String value = element.getAttribute(attribute); 
     if (value != null){ 
      result = true; 
     } 
    } catch (Exception e) {} 

    return result; 
} 

如何使用它:

WebElement input = driver.findElement(By.cssSelector("input[name*='response']")); 
Boolean checked = isAttribtuePresent(input, "checked"); 
// do your assertion here 
+0

是的,上面的代碼適合我。謝謝Yi Zeng –

+0

你爲什麼用try catch。當屬性不在元素上時會引發異常嗎? –

+0

@PraveenRawat:它是5年前創建的C#/ Java混合僞代碼,以提供一個想法。將其改爲適合您的任何內容。 –

4

here

getAttribute(java.lang.String name)

返回: 屬性的當前值或者如果未設置該值,則返回null。

使用任何測試你使用斷言值爲null

Assert.IsNull(getSingleElement(XXX).getAttribute( 「選中」))框架;

+0

怪異......我似乎得到一個org.openqa.selenium.NoSuchElementException。 –

2

用於斷言單選按鈕被選中

Assert.assertTrue(element.isSelected()); 

用於斷言單選按鈕沒有被選擇

Assert.assertFalse(element.isSelected()); 

用於斷言一個屬性目前在elem ENT

Assert.assertEquals(element.getAttribute(attributeName), expectedAttributeValue); 
1

複選框可以棘手有時,由於屬性檢查可以不被隨後的屬性值。

如果你只關注屬性的存在,一個簡單的檢查應該是這樣的:

boolean hasAttr_css = driver.findElementsByCssSelector("#input_id[checked]").isEmpty(); 
0
try { 
if (webdriver.findElement(By.identificationMethod(value)).getAttribute(value) != null) { 
     passed = false; 
    } 
} catch (Exception e) { 
    passed = true; 
} 

是那種溶液,當我需要檢查元素的存在我所用但是必須注意的是,NullPointer錯誤沒有被NoSuchElement異常捕獲。

3

不幸的是,接受的答案在報告的案例中無效。 由於某些原因,Cr和FF不存在的屬性返回空字符串而不是null。 問題地連接:https://github.com/SeleniumHQ/selenium/issues/2525

+0

嗨。我遇到了這個問題。當屬性不存在時,有沒有辦法捕獲?我的代碼現在看起來像這樣:if(altAttribute == null || altAttribute ==「」|| altAttribute ==「」)它不捕獲任何'we.getAttribute(「alt」);'返回。 .. – dsidler

相關問題