No such method exists for arbitrary groups. However, if you restrict to finite groups you can simply write down all possible sets of elements and then for each set work out if it is a subgroup. You can do this in finite time. Although "finite time" may be a rather long time, even for $S_3$...
But anyway, for small groups we can try to get something quick enough for "practical purposes" by doing clever things. So, put the identity and inverses manually in each set and then discard all sets of size which do not divide the order of your group. So here, $S_3$ has order $6$ so you only care about sets of size $1, 2, 3$ or $6$. Counting the number of elements and then discarding is quicker than deciding if each set is closed under products. However, even when doing all this this algorithm is still slow...noticeably quicker for small numbers, but slow all the same...
But anyway, a worked example:
$S_3=\{1, (12), (13), (23), (123), (132)\}$
Possible sets, whilst being clever and making sure the identity is in each set and that each set is closed under inverses:
$$\begin{align*}
&\{1\}\\
&\{1, (12)\}\\
&\{1, (13)\}\\
&\{1, (23)\}\\
&\{1, (123), (132)\}\\
&\{1, (12), (123), (132)\}\\
&\{1, (13), (123), (132)\}\\
&\{1, (23), (123), (132)\}\\
&\{1, (12), (13), (123), (132)\}\\
&\{1, (12), (23), (123), (132)\}\\
&\{1, (13), (23), (123), (132)\}\\
&\{1, (12), (13), (23), (123), (132)\}
\end{align*}$$
Then, discard the sets of order not dividing $6$,
$$\begin{align*}
&\{1\}\\
&\{1, (12)\}\\
&\{1, (13)\}\\
&\{1, (23)\}\\
&\{1, (123), (132)\}\\
&\{1, (12), (13), (23), (123), (132)\}
\end{align*}$$
Quickly check that these are closed under multiplication (they are because all subgroups of $S_3$ are cyclic). Thus, these are all our subgroups.
Note that in general you will have to discard some subsets at the final step. For example, in $\mathbb{Z}_4\times\mathbb{Z}_2$ you will discard the set $\{(0, 0), (1, 0), (3, 0), (0, 1)\}$.