Web元素Groovy isSelected()和选择得到错误的结果

时间:2019-05-20 14:24:19

标签: java selenium-webdriver groovy katalon-studio

场景 我想收集表中所有选定的[复选框-已选中]记录。下面是我的方法,

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
            }           
        }
    }

将表名作为参数传递,并收集表中所有选定的记录。但不幸的是,isCheckedisChecked1总是返回false

请指导我问题出在哪里

1 个答案:

答案 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")