In practice, once you are using test helpers, interactions can be encapsulated with greater detail, such as clarifying which is the expected link or button that is being clicked when adding or editing a module.
A common example is to use a FormTestHelper
:
def save_module_data(module_name, with:)
click_on module_name
form.input_for(:notes).type_in(with[:notes])
form.save
self
end
That helper could deal with finding the input using a qa attribute that won't change if the label for the field changes, etc.