场景 我想收集表中所有选定的[复选框-已选中]记录。下面是我的方法,
def getAlltheSelectedRecordId(String tableName){
WebDriver driver = DriverFactory.getWebDriver()
WebElement RefTable = driver.findElement(By.xpath("//*[@id='${tableName}']/tbody"))
List<WebElement> RowsOf_RefTable = RefTable.findElements(By.tagName('tr'))
int Totalcount = RowsOf_RefTable.size()
for (int row : (1..Totalcount)) {
boolean isChecked = driver.findElement(By.xpath("//*[@id='${tableName}']/tbody/tr[' + row + ']/td[2]/input")).isSelected()
println isChecked
boolean isChecked1 = driver.findElement(By.xpath("//*[@id='${tableName}']/tbody/tr[' + row + ']/td[2]/input")).selected
println isChecked1
if(isChecked){
String selectedRecordID = driver.findElement(By.xpath("//*[@id='${tableName}']/tbody/tr[' + row + ']/td[5]/a")).getText()
println selectedRecordID
}
}
}
将表名作为参数传递,并收集表中所有选定的记录。但不幸的是,isChecked
和isChecked1
总是返回false
请指导我问题出在哪里
答案 0 :(得分:1)
问题在于方式,将字符串放在一起,问题已经很明显了,在SO中突出显示了语法:
By.xpath("//*[@id='${tableName}']/tbody/tr[' + row + ']/td[2]/input")
"...' + row + '..."
不会将row
的值放在字符串内-只是此确切的“代码”。
解决方案是使用正确的引号将字符串结尾:
By.xpath("//*[@id='${tableName}']/tbody/tr[" + row + "]/td[2]/input")
甚至更好的是,坚持使用在字符串开头已经开始的方案:使用Groovys字符串替换:
By.xpath("//*[@id='${tableName}']/tbody/tr[${row}]/td[2]/input")