대부분의 웹 사이트 (URL을 사용할 수 있음)와 관련하여 제 생각에는 동일한 URL로 이동하는 대신 단순히 URL 대신 URL을 사용하는 것이 가장 좋습니다. 예를 들어
는 :
# Suggested by OP:
driver = Selenium::Webdriver.for :chrome, prefs: prefs
homepage = Homepage.new(driver)
login = homepage.go_to_login
welcome = login.log_in_as('dave4429')
# My Suggestion:
homepage = Url.new('/')
login = Url.new('/login')
welcome = Url.new('/welcome')
이 대신 모든 테스트에 대한 홈 페이지를 시작해야하는 URL에서 시작하는 것을 의미한다. 당신은 여전히 당신이 제안한 방법을 가지지 만, 사용자가 URL 이외의 수단을 통해 페이지에 액세스 할 수 있도록 다른 영역에서 사용됩니다.
그러나 이것은 원 스톱 샵 솔루션이 아닙니다. 모바일 및 데스크톱 응용 프로그램을 사용하는 경우 유일한 옵션은 홈 화면을 통과하는 것일 수 있습니다.이 경우 제안한 방법이 반드시 필요한 것입니다.
"페이지 개체 자체는 테스트 또는 테스트의 일부이며 항상 페이지 개체가 아닌 테스트 코드 내에 있어야합니다." - Selenium HQ
내가 아주 기본적인 일이고, 내가 가장 가능성이처럼 코딩을 사용하려면, 모듈 및 클래스로이 포장 할 준 예 :
google = Project::Pages::Google.new
google.search_for('Hello, World!')
expect(google.found_result?).to_equal(true)
편집 이 외에도, 당신은 오이 오이와 어떻게 작동하는지에 대한 오해가있는 것 같습니다.
단계 자체는 단계 내의 조치에 대한 설명이므로 단계 당 여러 행의 코드를 가질 수 있습니다. 예를 들어
:
Given I am logged in as "dave4429"
When I have submitted the "Contact Us" form with the following data:
| [email protected] | David McBlaine | I want to find out more about your Data Protection services, can I talk to a staff member or get a PDF? |
Then an email should be sent to "[email protected]" with the details specified
은 "때"다음과 같이 보일 수 있습니다에 대한 정의 : 그것은 모든 훨씬 당신이 정의 내에서 단계를 분해하는 방법에 따라 달라
When(/^I have submitted the "Contact Us" form with the following data:$/) do |table|
rows = table.raw
row = rows[0]
contact_us.fill_form({email: row[0], username: row[1], message: row[2]})
contact_us.submit_message
expect(browser.title).to_equal("Message Sent!")
end
.
그것은 당신이 내가 '기술을 사용하는 동안 방법 체인, 다시 밖으로 질문하지 contact_us.fill_form({email: row[0], username: row[1], message: row[2]}).submit_message
의 길에서 뭔가를하고 싶은 나에게도 분명이
편집 # 이 연쇄가 각 페이지마다 있어야하는지 또는 모든 것이 하나의 클래스 나 모듈에 포함되어야하는지 여부에 대한 질문은 사용자의 요구에 의해서만 답변 될 수 있습니다.
이것은 단지 하나의 클래스에 너무 많이 넣을 것이고, 그 클래스를 무너 뜨리면 테스터에게 더 많은 컨트롤을 줄 수 있고, 적은 코드가 쓰여질 것이라고 생각합니다.
아마도이 좋은 [post] (http://thomassundberg.wordpress.com/2011/10/18/testing-a-web-application-with-selenium-2/)가 도움이 될 수 있습니다. – troig
훌륭한 글입니다. 약간의 관심사 만이 여러 단계 클래스가 사용 된 경우 단계간에 전달 된 페이지 오브젝트의 인스턴스가 남아 있지 않을 것입니다. world/ootb 의존성 주입을 사용하면이 문제를 해결할 수 있지만 코드는 모든 페이지 객체 인스턴스의 infWindow를 매우 어지럽게 만든다. –