2015년 7월 19일 일요일

Selenium Grid for appium 사용해 멀티 디바이스 컨트롤.

selenium grid를 사용해 appium으로 두개 단말기 컨트롤 해봤다.

사용환경:
1.  리얼 단말기, 제니모션 에뮬레이터
2. MAC OS X 10.10.4
3. Eclipse, java, appium, testNG

SetUp:
Selenium Grid를 사용하기 위해서 hub, node를 먼저 설정해줘야 한다. 먼저 hub 설정.
1. 터미털에서
java -jar "selenium server 경로" -role hub
을 입력하고 엔터치면 아래처럼 hub가 설정된다.
ㄴ 다음은 브라우저 창에서 localhost:4444를 입력해 확인, 아래 화면이 나오면 성공
2. node 설정.
ㄴ nodeconfig 파일 작성. 텍스트편집기로 nodecofig에 필요한 정보 입력 후 json파일로 저장. 아래 이미지처럼 capabilities, configuration 을 작성하면 된다. capa의 browserName, Version, Platform은 해당 단말기의 상세 정보를 써주면 된다. configuragion에서 url, port를 정확하게 입력하면 된다. port는 겹치면 안되고, json 파일은 단말기 개수만큼 만들어 준다.
ㄴ 위 json파일로 appium node server 실행할 수 있다. 터미널에서
appium -p 4724 -bp 4714 --nodeconfig "json파일 경로"
입력 후 엔터치면 server가 실행된다. 동일한 방법으로 단말기 개수만큼 node server를 실행해주면 된다.
(-p는 port로 json파일의 port와 동일해야 하고, -bp는 bootstrap의 약자로 appium 실행 시 필요한 port이므로 역시 중복되면 안된다.)

ㄴ 연결된 server개수 만큼 브라우저에 표시되면 성공.
3. script 작성
ㄴ 1) testNG: 단말기 정보를 parameter로 저장


ㄴ java: 단말기 개수에 맞게 capabilities 작성(udid, devicesName은 필수 입력)

ㄴ 마지막으로 beforeClass에 appium드라이버 인스턴스를 만든 후 hub url을 호출하면 끝.

public AndroidDriver driver = null
driver = new AndroidDriver(new URL("http://localhost:4444/wd/hub"), capability);
PS: public AndroidDriver driver = null; 를 만들 때 static을 추가하면 여러개 단말기 컨트롤이 제대로 되지 않으니 static은 빼줘야 한다.)