Проблема заключается в том, что строки собраны вместе, и проблема уже видна с выделением синтаксиса здесь в 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")