이것은 일반적인 문제입니다. 나는주의를 기울일 것이다 :
요소 이름을 지정하는 방법
css id 또는 class를 사용하여 요소를 식별하십시오. 객체가 고유 할 때 CSS ID를 사용하는 것이 좋습니다. 예를 들어 Ruby on Rails와 같이 사용중인 프레임 워크를 고려하면 name
속성이 자동으로 할당되며 CSS ID 또는 클래스를 사용하는 것보다 (직관적이지 않게) 더 좋을 수 있습니다
요소를 식별하는 방법
같은 위치 식별자 피 table/tr/td/td
같은 형태의 찬성 td[id="main_vehicle"
또는 td[class='alternates']
. 적절한 경우 데이터 속성 사용을 고려하십시오. 더 나은 등을 피하기 레이아웃 태그하려고 <td>
아예 그래서 위의 어느 스팬 및 사용하는 것이, 예를 들어 추가 할 수 있습니다 위해 <span id="main_vehicle">
또는 같은 와일드 카드 선택 *[id="main_vehicle"]
(가) 어디에 *
지금 사업부, 스팬, TD 등이 될 수를
QA 및 테스트에만 사용되는 테스트 특정 데이터 속성 사용
요소에 대한 불필요한 자격을 피하십시오. 다음을 사용하여 자신을 찾을 수 있습니다.
body.main div#vehicles > form#vehicle input#primary_vehicle_name
그러나이를 위해서는 입력 필드가 정확한 차량 ID를 가진 양식으로 유지되고 본문 클래스가있는 본문이있는 페이지와 차량 ID가있는 차량이있는 div가 차량. 해당 구조 및 테스트가 변경되면 중단됩니다. 이 경우에는
input#primary_vehicle_name
요소를 고유하게 식별하기에 충분합니다.
보이는 텍스트를 나타내는 테스트를 피하십시오. 사용자에게 표시되는 페이지의 텍스트는 일반적으로 사이트가 유지 관리되고 업데이트 될 때 시간이 지남에 따라 변경되므로 css id 및 css 클래스 또는 데이터 속성과 같은 식별자를 사용하십시오. 같은 요소 form
, input
그리고 select
형태의 사용은 일반적으로 예를 들어, ID 또는 클래스와 함께, 또한 식별 요소의 좋은 부분이다 li.vehicle
또는 input#first-vehicle
당신은 또한 예를 들어, 자신의 식별자를 추가 할 수 있습니다 <div data-vehicle='dodge'>
. 이런 식으로 개발자와 디자이너가 변경할 수있는 요소 ID 또는 클래스를 사용하지 않아도됩니다. 나는 시간이 지남에 따라 개발자와 디자이너와 함께 일하고 이름과 범위를 합의하는 것이 더 낫다는 것을 알았습니다. 그것은 어렵다.
고정 데이터 유지 관리 방법
실제 요소를 식별하는 것과 유사하게 변수 나 메소드로 유지되어 재사용되고 중앙에서 유지 될 수있는 작은 텍스트 조각 인 페이지 개체를 위해 값을 식별하는 인라인 하드 코딩 된 선택기를 사용하지 마십시오. 하드 코딩 된 값에 대해이 패턴을 따르는 Javascript 변수의 예 :
storedVars["eqv_auto_year"] = "2015";
storedVars["eqv_auto_make_1"] = "ALFA ROMEO";
storedVars["eqv_auto_make_2"] = "HONDA";`
셀레늄 위키 및 셀레늄 문서의 페이지 개체에 대한 추가 정보
개발자와의 커뮤니케이션.
워크 플로 문제인 '개발자가 변경하고 QA 자동화를 중단하는'측면에서 기술적 인 접근 방식에 관계없이. 다음 사항을 확인해야합니다. 모든 사람이 동일한 팀입니다. 개발자는 동일한 통합 테스트를 실행합니다. 표준이 합의되고 두 그룹이 뒤 따릅니다. 완료의 정의에는 UI 테스트 실행 및 업데이트가 포함됩니다. 개발자와 테스터는 테스트 계획을 수립하고 티켓 정리 (Agile을 수행하는 경우)에 참석하고 정리의 일부로 UI 테스트에 대해 이야기합니다. 이름 지정에 사용하는 모든 접근 방법과 전략이 응용 프로그램 개발자와 조정되어 있는지 확인해야합니다. 같은 페이지에 표시되지 않으면 객체 이름 지정과 충돌하는 것이 좋습니다. 루비 프로젝트를 위해 최근에 만든 페이지 객체 메소드의 몇 가지 예 :
def css_email_opt_in_true
'auto_policy[email_opt_in][value=1]'
end
def css_phone_opt_in
'*[name="auto_policy[phone_opt_in]"]'
end
def css_phone_opt_in_true
'input[name=phone_opt_in][value=true]'
end
def css_credit_rating
'auto_policy[credit_rating]'
end
다음은 자바 스크립트 변수와 동일한 페이지 객체입니다.
storedVars["css_email_opt_in"] = "css=*[name='auto_policy[email_opt_in]']";
storedVars["css_phone_opt_in"]="css=*[name='auto_policy[phone_opt_in]']";
storedVars["css_phone_opt_in_true"]="css=input[name='phone_opt_in'][value=true]";
storedVars["css_credit_rating"]="css=select[name='auto_policy[credit_rating]']";