我正在为硒测试编写辅助方法.其中之一是:
private static List<DataRow> parseTable(WebElement table) { List<WebElement> tableHeaders = table.findElements(By.tagName("th")) List<DataRow> dataRow = table.findElements(By.xpath(".//tbody/tr")).collect { Map<String,String> columns = [:] it.findElements(By.tagName("td")).eachWithIndex { item,i -> columns[tableHeaders.get(i).text] = item.text } new DataRow(it,columns) } return dataRow }
我不喜欢这部分:
it.findElements(By.tagName("td")).eachWithIndex { item,i -> columns[tableHeaders.get(i).text] = item.text }
有没有更好的方法从两个列表制作地图?
解决方法
你应该能够做到:
def columns = [tableHeaders,it.findElements(By.tagName("td"))].transpose().collectEntries()
通过解释:
鉴于:
def a = [ 'a','b','c' ] def b = [ 1,2,3 ]
然后
def c = [ a,b ].transpose() assert c == [ [ 'a',1 ],[ 'b',2 ],[ 'c',3 ] ]
和:
def d = c.collectEntries() assert d instanceof Map assert d == [ a:1,b:2,c:3 ]