It can happen when you want to purge message selectively from Trash, that is you use a search first. (I needed this, because for some reason Gmail did not delete messages older than 30 days, therefore my inbox was almost fulI, so I had to find a way to purge some messages manually from Trash.) If you use search there will be no Delete Forever button. So what can you do?
The solution is searching for the opposite of you want, then label those messages with a new label, move them to the inbox, so only messages you want to delete stay in the Trash. This way you can select them all there and there will be a Delete Forever button, because you do not have to search first to find these messages. Finally, go to the label you chose and delete those messages again, so they go back to the Trash.
Here's an example: say, you want to delete messages from Trash which have an attachment, but you want to leave other messages in the trash, because you might need them later.
You can search for them like this:
in:trash has:attachment
But according to the above you want the opposite, those messages which do not have an attachment (note the - character):
in:trash -has:attachment
Run this search and mark all of these messages with a new label (say "trashtemp"). Then after labelling them, move them into the Inbox. Then go back to Trash, select all of the remaining messages and delete them forever. Finally, go to the trashtemp label, select all messages under it and delete them to make them go back to the Trash.