miałem dziwny przypadek, w którym niektóre testy dymne szli przez różne strony logowania klienta-centric, które miały niewielkie zmiany na robienie logowanie przycisk Prześlij ... Kierując tabeli Ogórek z użytkownikiem, org itp.
# A bit of a hack, org_name is normally a subdomain, but sometimes it is the complete domain
def login(user, org_name)
# Use the below to automatically hit each user's org's server
if org_name.include? '.com'
Capybara.app_host = "http://#{org_name}"
else
Capybara.app_host = "http://#{org_name}.mydomain.com"
end
visit '/'
fill_in 'username', :with => user
fill_in 'userpwd', :with => '***'
begin
page.find(:link_or_button, 'submit')
click_on 'submit'
rescue Capybara::ElementNotFound
page.find(:link_or_button, 'Log In')
click_on 'Log In'
rescue Capybara::ElementNotFound
pending "Need to determine how to invoke the Login button for #{org_name} near Line ##{__LINE__} of #{__method__} in #{__FILE__} "
end
# -----------------------
# Work-around for modal popup saying SSL is mismatched if you are using actual production URLs
# The rescue is for cases that do not exhibit the modal pop-up
page.driver.browser.switch_to.alert.accept rescue Selenium::WebDriver::Error::NoAlertPresentError
# Ensure that login was successful
page.should_not have_content 'Login failed'
end
Miałem zamiar to zrobić z powodu linków Javascript, ale potem zdecydowałem się nie: w tym przypadku to * jest * możliwe do odróżnienia. Np. Po środkowym kliknięciu otwiera się nowa karta, a po najechaniu cel linku jest wyświetlany tylko dla linku. Najlepszą praktyką jest: nie używaj w tym przypadku odnośników i nie zezwalaj na testy. –
Istnieje jednak przypadek, w którym to jest tego warte: negacja. W przeciwnym razie, jeśli zmienisz linki do przycisków, testy będą zawsze milczeć. –