在web的自動化測試過程中,經常需要對錶格進行處理,比如下圖的網頁:
現在我們想選擇第二個單選按鈕,那麼如果處理?
方法1:數數
如果我們可以確定操作的單選按鈕所處的位置,比如第二個,那麼我們可以用如下方式:
webDriver.findElements(By.cssSelector("input[type='radio']")).get(1);
但是在實際項目中,我們是不能或者不容易確定這個順序的,所以有如下方式:
方法2:相對定位
因爲第二行中的JNDI name是唯一的,所以我們可以使用該屬性來定位tr,然後在tr中查找單選框進行操作,此處可以:
(1)使用xpth:
WebElement tr = webDriver.findElement(By.xpath("//tr[td[2]='jdbc/ProxyDS']")); WebElement webElement = tr.findElement(By.cssSelector("input[type='radio']"));
擴展一下此處的xpath常用函數:
1)normalize-space:該函數可以把字符串兩端的空格去掉
2)upper-case,lower-case等XPATH2.0函數,可以把字符串轉成大寫或者小寫字母,但是現階段主流瀏覽器只支持XPATH1.0,所以此時需要使用hack,比如如下的XPATH表達式:
//tr[translate(td[3], "abcdefghijkl", "ABCDEFGHIJKL")='*LOCAL']
該表達式將選擇這樣的額tr:第三列的文本經過大寫轉換後的結果爲*LOCAL
如果還有其他較爲複雜的文本處理,可以考慮下文方法(2)進行定位。
(2)在table中,遍歷tr和td:
for(WebElement tr : webDriver.findElements(By.tagName("tr"))){ List<WebElement> tdList = tr.findElements(By.tagName("td")); if(tdList.get(1).getText().equals("jdbc/ProxyDS")){ return tr; } }