지식메모
-
Java 텍스트 파일 생성과 읽기를 이용한 누적시간 계산하기2014.12.29
이클립스에서 Ruby 플러그인 추가하기
보석 또는 핑클 노래인줄만 알았던
Ruby
언어로 해야될게 있다고 해서 시도해보았다.
일단 툴이 중요한데 이클립스에서도 플러그인이 있다고 하여 다행이었다.
새로 툴 깔아서 그거 익히는 것보다는 훨씬 나을테니..
우선 이클립스 상단 Help > Install New Software 를 클릭
Add를 누른 후 다음 주소를 넣어준다.
http://download.aptana.com/studio3/plugin/install
그럼 Aptana Studio3 라고 나오는데 이걸 설치해준다.
설치가 끝나고 이클립스 재부팅을 한다.
그리고 프로젝트를 생성하는데
루비 프로젝트가 생겼다.
만약 없으면 밑에 Project...를 눌러 루비 프로젝트를 선택한다.
프로젝트를 생성 후 우클릭
New > File 을 선택
파일을 생성하는데 꼭 파일명 뒤에 ruby 확장자인
.rb
를 붙여준다.
그럼 파일이 생긴다.
테스트 용으로 파일을 더블클릭해 연 뒤
puts "hello ruby"
입력 후 Run 하면 하단에 결과가 나타난다.
+번외
그리고 사실 RDT를 설치하면 된다고 했는데 설치해도 루비 프로젝트가 나오지 않아 Aptana를 설치했다.
혹시 Aptana를 설치하고도 안된다면 이걸 설치해볼 수 있다.
RDT 설치는 똑같다.
http://download.aptana.com/tools/radrails/plugin/install/radrails-bundle
Rails 를 설치한다.
똑같이 설치해주면 된다.
'지식메모 > Python' 카테고리의 다른 글
파이썬과 자바 selenium 사용법 간단한 기능 비교 및 xpath 사용법 (0) | 2018.08.08 |
---|---|
파이썬 TabError: inconsistent use of tabs and spaces in indentation 에러 해결 (Atom 에디터 옵션 설정) (0) | 2018.08.08 |
파이썬에서 selenium을 이용하여 크롬 브라우저 띄우기 (0) | 2018.08.07 |
android calabash apk is not signed with any of the available keystores 문제 해결을 위한 apk resign 하기 (0) | 2015.05.29 |
윈도우 7 Ruby 설치하기 & Android calabash 설치 후 apk 실행하기 (0) | 2015.05.15 |
윈도우 7 Ruby 설치하기 & Android calabash 설치 후 apk 실행하기
설치 환경
Windows 7 64bit
안드로이드 칼라배시 설치하기
그래서 루비 언어 설치부터 해야한다.
벌써부터 예감이 안 좋은게 설치하면서 삽질만 푸다 우물을 발견할 것만 같다.
이부분은 환경변수 설정 부분이지만
인터넷 찾다보니 서로 설치환경이 달라 이것저것 시도해 본 방법이므로
우선 무시하고
혹시나 밑에 과정에서 안되는 부분이 있다면 시도해볼 수 있다.
이미 이클립스와 자바가 설치되어 있다면 환경변수는 다 되어있다는 상태로 가정한다.
혹시 모르니 ANDROID_HOME 이라는 시스템 환경변수를 추가하여
변수 값은 sdk 폴더(또는 android-sdks 폴더) 경로로 지정해준다.
또 시스템 변수 Path 를 열어
;D:\backup\eclipse\adt-bundle-windows-x86_64-20140702\sdk\platform-tools
platform-tools 폴더 경로 추가해준다.
추가할 때 앞에 세미콜론 ; 필수
sdk 안 깔려 있다면
http://developer.android.com/sdk/index.html#Other
여기서
installer_r24.2-windows.exe(Recommended)
이걸 받는다.
우선 루비를 다운받아야 한다.
http://rubyinstaller.org/downloads/
위 링크로 들어간다.
그럼 아래와 같은 사이트가 나타나는데
우선 RubyInstaller 에서 최신 버전을 받는다.
윈도우 64비트이므로 64비트 버전을 다운로드
그리고 아래 쪽에 DEVELOPMENT KIT 도 다운받아야 한다.
이것도 최신버전으로 64비트로 다운로드 하였다.
다운받은 Ruby 2.2.2(x64) 를 실행시킨다.
그럼 중간에 아래와 같은 화면이 나타나는데 일단 다 체크했다.
그리고 쭉 install 한다.
cmd 창에서
ruby -v
라고 치면 루비 버전이 나타날 것이다.
그럼 일단 루비 설치 끝
이제 DEVELOPMENT KIT 를 설치한다.
이건 설치가 아니라 그냥 압축이 풀릴 것이다.
C 드라이브에 DevKit 폴더를 만들어 풀어 놓았다.
임의의 폴더에 압축을 풀고 나서
cmd 창을 킨다.
그리고 해당위치로 이동
C:\Devkit
그리고
ruby dk.rb init
을 입력한다.
그럼 어쩌구 저쩌구 나오고
ruby dk.rb install -f
라고 입력한다
그런데!!
위 와 같이 나온다면
Devkit 폴더로 가서
config.yml
을 수정해주어야 한다.
파일을 메모장으로 열어보면 아마
# This configuration file contains the absolute path locations of all # installed Rubies to be enhanced to work with the DevKit. This config # file is generated by the 'ruby dk.rb init' step and may be modified # before running the 'ruby dk.rb install' step. To include any installed # Rubies that were not automagically discovered, simply add a line below # the triple hyphens with the absolute path to the Ruby root directory. # # Example: # # --- # - C:/ruby19trunk # - C:/ruby192dev # --- |
이렇게 되어있을텐데
# - C:/ruby192dev
이걸 루비가 설치된 폴더 경로로 바꿔주어야 한다.
위 사진 처럼 루비 폴더 경로로 바꿔준다.
앞에 # 표시 꼭 삭제해준다.
#이 있으면 주석으로 인식해서 적용되지 않는다.
그럼 다시 cmd 창으로 돌아와서
(기존 cmd 창 끄고 새로 킨다)
다시 시도 한다.
ruby dk.rb install -f
아까와는 다른 문구다! 아무래도 잘된거 같다.
루비 설치 끝!
Android calabash 설치 후 apk 실행하기
이제 칼라배시를 설치한다.
gem install calabash-android
입력
그럼 뭔가 주르르륵 나온다.
설치됐다.
혹시 Couldn't reserve space for cygwin's heap 에러가 뜬다면
Ruby 설치 폴더의 bin 디렉토리의 msys-1.0.dll 파일을 url의 msys-1.0.zip 파일 다운 받아 덮어쓴 후 위 cmd 다시 실행하면 된다고 한다.
이제 아무 위치에 폴더를 생성한다.
D:/testapp 라고 생성했다 치면
cmd 창에서 D:/testapp 경로로 이동하여
calabash-android gen
을 실행하면
Question 문구 나오면 엔터치고 하면 features 폴더가 생성될 것이다.
실제로 testapp 폴더에 들어가면 생성되어 있을 것이다.
또 들어가면 my_first.feature 라는 파일이 있는데 거기다 스크립트를 작성하면 된다.
그리고 이제 테스트 해볼 apk 파일을 해당경로에 복사해놓자
testapp 폴더에 복사해놓고
calabash-android run ~~.apk
를 실행하는데 잘되면 다행인데 CP949 어쩌구 에러가 뜬다면
chcp 65001 을 입력하여
위와 같이 변경 후 시도한다.
잘되면 다행인데 또 뭔가 터진다.
apk 서명 문제가 발생하는데 이건 링크로 첨부
http://yonoo88.tistory.com/670
일단 설치는 했고 이제 활용법을 알아야하는데 뭐가 뭔지 모르겠다..
'지식메모 > Python' 카테고리의 다른 글
파이썬과 자바 selenium 사용법 간단한 기능 비교 및 xpath 사용법 (0) | 2018.08.08 |
---|---|
파이썬 TabError: inconsistent use of tabs and spaces in indentation 에러 해결 (Atom 에디터 옵션 설정) (0) | 2018.08.08 |
파이썬에서 selenium을 이용하여 크롬 브라우저 띄우기 (0) | 2018.08.07 |
android calabash apk is not signed with any of the available keystores 문제 해결을 위한 apk resign 하기 (0) | 2015.05.29 |
이클립스에서 Ruby 플러그인 추가하기 (2) | 2015.05.19 |
리눅스/Cent OS 에서 추가 하드디스크 마운트 하기
ssd에 Cent OS 를 설치한 후 1TB 하드디스크에 가상머신 이미지를 저장하여야 하는데 접근이 불가능했다.
암호를 쳤음에도 접근할 수 없다고 뜨는 문제가 발생했는데 이 하드디스크를 마운트 해줘야 사용이 가능하다
먼저 터미널을 열고 su - 입력 후 관리자 계정으로 변경한다.
그리고 fdisk -l 을 쳐서 드라이브를 확인해본다.
맨위에 /dev/sdb 경로에 1000.2 GB 드라이브 정보가 나타났다. 이 디스크를 마운트 해야한다.
마운트 하기전 디스크를 포맷해주고 파티션을 잡아야 한다.
fdisk [디스크 경로] 입력
위 정보에서 디스크 경로가 /dev/sdb 이므로
fdisk /dev/sdb 입력
먼저 파티션을 삭제해야 하므로 d 를 입력해준다.(파티션이 있다면)
그리고 파티션을 새로 추가하기 위해 n을 입력 후
partition type은 p 를 입력
다음에 나오는 디스크 설정값은 그냥 입력하지 않고 엔터쳐서 진행한다.
파티션이 추가되면 w 를 눌러 저장하고 빠져나온다.
관련 옵션은 m을 입력하면 옵션에 대한 설명이 나타난다.
▲옵션 설명
이제 디스크 포맷을 해줘야 하는데 디스크 형식을 알아야한다.
vi /etc/fstab 을 열어 확인해보는데 없다면
blkid 를 실행하여 해당경로 디스크의 type을 확인한다.
확인했다면 ext4 형식이므로
mkfs.ext4 /dev/sdb
를 입력하여 포맷한다.
▲포맷 결과
포맷이 끝나고 나면 마운트를 해주어야 한다.
그 전에 마운트 할 폴더를 만들어주어야 한다.
root 폴더로 이동하여 mkdir [폴더명] 을 입력하여 폴더를 만들어준다.
ex) mkdir data
▲root 경로에 data 폴더를 생성한모습
위 사진을 보면 [root@localhost ~] 이렇게 되어있는데 ~ 이 아닌 / 가 되어야 root 경로이다.
그래서 cd .. 으로 끝에 / 로 바뀐 걸 볼 수 있다.
이제 폴더에 권한을 주어야 하는데
ls -al 명령어로 data 폴더의 권한을 살펴보면
이렇게 나타난다.
저 문자가 나타내는 건 아래 표에 나와있다.
참고 링크 http://www.mireene.com/webimg/linux_tip1.htm
즉 현재 data 폴더는 755 상태로 제3자는 읽고 실행만 가능한 상태이다.
원활한 작업을 위해 제 3자에게도 권한을 주도록 777 변경해주어야 한다.
변경 명령어로는
chmod 권한숫자 폴더명 으로 해주면된다.
chmod 777 data
이렇게 해주고 다시 확인을 해보면 다음과 같이 나타날 것이다.
▲777로 변경된 모습
폴더 권한 변경 완료 후 이제 마운트를 해주어야 한다.
마운트 명령어는
mount -t [파일시스템형식] [파티션명] [마운트할위치] 로 해주면 된다.
위에서 파일시스템 형식은 ext4 로 확인하였으니
mount -t ext4 /dev/sdb /data
명령어로 마운트 해준다.
마운트 했다면 /dev/sdb 의 uuid를 fstab 파일에 등록해주어야 한다.
마운트 하고 나면 uuid 가 바뀌는? 듯 하여 다시 한번 확인해준다.
blkid 또는 ls -l /dev/disk/by-uuid 를 입력하여 확인
uuid를 확인했다면
vi /etc/fstab
을 입력하여 파일을 연다.
▲마지막에 uuid를 추가해준 모습
uuid와 마운트경로(/data), 파일형식(ext4)만 수정해주고 등록해준다.
*참고사항 vi 문서 편집시 i 를 누르면 입력모드로 바뀌며 편집이 끝났다면 esc키를 누른다음 :wq 를 입력하여 저장 후 빠져나올 수 있다.
참고 링크 https://www.linux.co.kr/linux/vi/vi.html#12 에서 vi 편집 명령어 확인할 수 있다.
이제 마운트가 잘되었는지 df -h 로 확인해본다.
마지막에 /dev/sdb 가 보인다. 확인했으니 재부팅을 한다.
왼쪽 장치목록에 1TB 볼륨이 사라진 걸 볼 수 있고 data 폴더 속성에서 용량을 보면 1TB 볼륨의 크기만큼 잡혀있는 걸 볼 수 있다.
이로써 마운트 작업이 끝났다
'지식메모 > 리눅스' 카테고리의 다른 글
CentOS 에서 yum install 설치 에러 해결 (0) | 2016.11.10 |
---|---|
리눅스/Cent OS 7 인터넷이 되지 않을 때 일시적 해결방법(*재부팅하면 다시 인터넷 안됨) (2) | 2015.06.05 |
리눅스 vi/vim 단축키 모음 (0) | 2013.10.22 |
리눅스 vi,vim 블럭 복사하기 (0) | 2013.10.22 |
vim 문자열 찾기 (0) | 2013.09.02 |
안드로이드 체크박스 값 전달하기
안드로이드 체크박스를 이용하여 액티비티간 값 전달하기
필요한 코드만 적어서 이대로 실행하면 에러가 나므로 알맞게 수정이 필요함
check.xml 에 체크박스 선언
<CheckBox android:id="@+id/option1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15sp" />
<CheckBox android:id="@+id/option2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15sp" />
CheckActivity.java 에서 체크했을 때 동작 코드 추가
public class CheckActivity implements OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// 액티비티 생성 setContentView(R.layout.check);// check.xml //버튼 선언 Button button=(Button)findViewById(R.id.button_result); button.setOnClickListener(this); // option1 체크박스가 눌렸을 때 findViewById(R.id.option1).setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { Checked(v); // 체크되었을 때 동작코드 } }); // option2 체크박스가 눌렸을 때 findViewById(R.id.option2).setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { Checked(v); // 체크되었을 때 동작코드 } }); } public String Checked(View v) { // 체크되었을 때 동작할 메소드 구현 // TODO Auto-generated method stub CheckBox option1 = (CheckBox) findViewById(R.id.option1); // option1체크박스 // 선언 CheckBox option2 = (CheckBox) findViewById(R.id.option2); // option1체크박스 // 선언 String resultText = ""; // 체크되었을 때 값을 저장할 스트링 값 if (option1.isChecked()) { // option1 이 체크되었다면 resultText = "option1"; } if (option2.isChecked()) { resultText = "option2"; // option2 이 체크되었다면 } return resultText; // 체크된 값 리턴 } @Override public void onClick(View v) { if (v.getId() == R.id.button_result) { //button_result 이라는 버튼이 생성되었다고 가정. Intent it = new Intent(this, MainActivity.class); // MainActivity.java로 보내기 위한 인텐트 선언 it.putExtra("it_check", Checked(v)); // it_check 라는 이름하에 체크된 값을 전달 startActivity(it); // MainActivity.java를 실행하면서 값을 전달 } } }
MainActivity.java에서 값 전달 받기
public class MainActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);//액티비티 생성 setContentView(R.layout.main);//main.xml Intent it=getIntent(); //인텐트 받기 선언 //이전에 보냈던 it_check의 값을 받아 str에 저장 String str= it.getStringExtra("it_check"); //즉 str = "option1" 또는 "option2" 가 들어있음 //이 값을 이용하여 필요한 동작 구현 if(str.equals("option1"){ //str 값이 option1 이라면 //필요한 동작 코드 작성 }else if(str.equals("option2"){ //str 값이 option2 라면 //필요한 동작 코드 작성 } } }
동작 순서는 check.xml -> CheckActivity.java -> MainActivity.java 이렇게 된다
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 시스템 언어 변경에 따라 앱에서도 자동으로 언어 변경하기 (4) | 2015.08.20 |
---|---|
안드로이드 HashMap 을 이용한 이미지 세팅하기. (0) | 2015.06.28 |
안드로이드 Android library projects cannot be launched 에러 발생 해결책 (0) | 2015.01.31 |
안드로이드 Unable to start activity ComponentInfo 문제해결 (0) | 2015.01.31 |
안드로이드 킷캣에서 사진 자르기시 팅기는 현상 임시 해결..? (0) | 2014.12.15 |
안드로이드 Android library projects cannot be launched 에러 발생 해결책
Android library projects cannot be launched 에러가 발생한다면
프로젝트 우클릭 > propertise > Android 탭을 보면 다음과 같은 화면이 나타나는데
Is Libaray 체크 해제해주면 된다.
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 HashMap 을 이용한 이미지 세팅하기. (0) | 2015.06.28 |
---|---|
안드로이드 체크박스 값 전달하기 (21) | 2015.02.15 |
안드로이드 Unable to start activity ComponentInfo 문제해결 (0) | 2015.01.31 |
안드로이드 킷캣에서 사진 자르기시 팅기는 현상 임시 해결..? (0) | 2014.12.15 |
안드로이드 R.java 파일 없어졌을 때 해결법 (2) | 2014.09.05 |
안드로이드 Unable to start activity ComponentInfo 문제해결
참고링크
당황하지 않고
로그캣에서
Caused by: java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.d(Log.java:138)
at com.example.eerrortest.MainActivity.onCreate(MainActivity.java:16)
Caused by 부분을 주목하고 그 밑에 해당 액티비티에 에러 라인을 보고 해결하면된다.
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 체크박스 값 전달하기 (21) | 2015.02.15 |
---|---|
안드로이드 Android library projects cannot be launched 에러 발생 해결책 (0) | 2015.01.31 |
안드로이드 킷캣에서 사진 자르기시 팅기는 현상 임시 해결..? (0) | 2014.12.15 |
안드로이드 R.java 파일 없어졌을 때 해결법 (2) | 2014.09.05 |
안드로이드 graphical Layout 안 뜨는 문제해결 (7) | 2014.08.10 |
Selenium & Webdriver 자동화 테스트 예제 - Naver 지식인 (크롬 브라우저)
셀레니움 JAVA 버전 jar 라이브러리 다운로드 후 프로젝트에 추가
http://docs.seleniumhq.org/download/
2.44.0 클릭하여 다운로드
프로젝트에 추가하는 방법
프로젝트 우클릭 > Properties > Java Build Path > Add External JARs.. 클릭 후 해당 라이브러리 선택하여 추가
크롬브라우저 용 드라이버 파일
실행 동영상
소스코드
package work2; import java.util.List; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.Select; @FixMethodOrder (MethodSorters.NAME_ASCENDING) public class INTest { private static WebDriver driver; String Title = null; String URL = null; String alertText = ""; @BeforeClass public static void setUp() throws Exception { System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe"); //크롬 드라이버 파일 경로설정 driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); //응답시간 5초설정 driver.get("http://www.naver.com"); //접속할 사이트 } @Test public void Step_01_지식인_로그인_Test () throws Exception { driver.findElement(By.id("svc.kin")).click(); //지식인 클릭 driver.findElement(By.id("login_btn")).click(); //NAVER로그인 클릭 driver.findElement(By.id("id")).sendKeys("ID"); //ID driver.findElement(By.id("pw")).sendKeys("PASSWORD"); //비번 driver.findElement(By.className("int_jogin")).click(); //로그인 버튼 클릭 } @Test public void Step_02_임시저장_Test () throws Exception { for(String Handle : driver.getWindowHandles()) //새창으로 스위칭 driver.switchTo().window(Handle); driver.findElement(By.xpath("//*[@id='main_top_2']/div[1]/fieldset[1]/div/a/img")).click();//질문하기 클릭 driver.switchTo().frame("editor"); //질문하기 입력창 iframe으로 스위칭 driver.findElement(By.xpath("//*[@id='title']")).sendKeys("원투쓰리포"); //제목입력 driver.switchTo().frame("SmartEditorIframe"); //내용입력 창 iframe 스위칭 driver.findElement(By.cssSelector("body")).sendKeys("일이삼사"); //내용입력 driver.switchTo().defaultContent(); //스위칭 초기화 //다시 질문하기 창 iframe 스위칭 driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='editor']"))); driver.findElement(By.xpath("//*[@id='au_submit_button']/div[2]/a[1]/img")).click(); //임시저장 클릭 String num = driver.findElement(By.id("temporary_save_count")).getText(); //현재 임시저장 글 수 카운트 추출 Thread.sleep(1000); //너무 빨라 얼럿 창 노출이 안되는 걸 방지하기 위해 슬립 추가 Alert alert = driver.switchTo().alert(); //얼럿 창으로 스위칭 alertText = alert.getText(); //얼럿 창 메시지 추출 alert.accept(); //얼럿 창 확인 클릭 System.out.println(alertText); //얼랏 창 메시지 출력 Thread.sleep(1000); System.out.println("임시저장 글 개수 : "+num); driver.findElement(By.xpath("//*[@id='title']")).clear(); //질문 제목 삭제 driver.findElement(By.xpath("//*[@id='title']")).sendKeys("파이브식스세븐에잇"); //질문 다시 입력 driver.switchTo().frame("SmartEditorIframe"); //내용 입력 창 iframe 스위칭 driver.findElement(By.cssSelector("body")).sendKeys("오육칠팔"); //내용입력 driver.switchTo().defaultContent(); //창 스위칭 초기화 //다시 질문하기 창 iframe 스위칭 driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='editor']"))); Thread.sleep(1000); } @Test public void Step_03_다음단계_Test () throws Exception { driver.findElement(By.xpath("//img[@alt='다음단계']")).click(); //다음단계 버튼 클릭 //카테고리 Thread.sleep(1000); driver.findElement(By.linkText("디렉토리 직접 선택")).click(); //디렉토리 직접선택 클릭 Select dropdown = new Select(driver.findElement(By.id("choose_dir_d1"))); //첫번째 셀렉 박스를 가져옴 dropdown.deselectAll(); //선택 모두 초기화 dropdown.selectByValue("1"); //value 1인 값을 선택 dropdown = new Select(driver.findElement(By.id("choose_dir_d2"))); //두번째 셀렉박스 가져옴 dropdown.deselectAll(); //이하 동일 dropdown.selectByValue("101"); dropdown = new Select(driver.findElement(By.id("choose_dir_d3"))); dropdown.deselectAll(); dropdown.selectByValue("10103"); dropdown = new Select(driver.findElement(By.id("choose_dir_d4"))); dropdown.deselectAll(); dropdown.selectByValue("1010303"); Thread.sleep(1000); driver.switchTo().defaultContent(); //창 스위칭 초기화 //질문하기 창 iframe 스위칭 driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='editor']"))); driver.findElement(By.xpath("//*[@id='au_submit_button2']/div[2]/a[1]/img")).click();//임시저장 클릭 Thread.sleep(3000); Alert alert = driver.switchTo().alert(); //얼럿 창 스위칭 alertText = alert.getText(); alert.accept(); //얼럿 확인 클릭 System.out.println("다른제목으로 "+alertText); String num = driver.findElement(By.id("temporary_save_count")).getText(); //임시저장 카운트 추출 System.out.println("임시저장 글 개수 : "+num); } @Test public void Step_04_이전_글_임시저장_삭제_Test () throws Exception { // 임시저장 창 driver.findElement(By.className("_tempsave_open_close")).click(); //임시저장 글 클릭 driver.switchTo().defaultContent(); //창 초기화 driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='editor']"))); //질문하기 iframe 창 스위칭 String info = driver.findElement(By.className("info_tempsave")).getText(); //임시저장 창 안내 글 추출 System.out.println("임시저장 창 " + info); WebElement tempList = driver.findElement(By.className("tempsave_list")); //임시저장 글 목록 가져옴 List<WebElement> list = tempList.findElements(By.className("q_on")); //목록을 리스트에 넣어둠 //이전 글이니까 2번째인 1번 목록 삭제 버튼을 클릭 list.get(1).findElement(By.tagName("img")).click(); Thread.sleep(3000); Alert alert = driver.switchTo().alert(); //삭제 확인 얼럿 창 alertText = alert.getText(); alert.accept(); //확인 클릭 System.out.println("이전" + alertText); } @Test public void Step_05_임시저장_삭제_Test () throws Exception { /*******이전 글 삭제와 동일*******/ driver.switchTo().defaultContent(); driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='editor']"))); WebElement tempList1 = driver.findElement(By.className("tempsave_list")); List<WebElement> list1 = tempList1.findElements(By.className("q_on")); //여기서 현재글 삭제를 위해 1번째인 0번째 목록 삭제버튼 클릭 list1.get(0).findElement(By.tagName("img")).click(); Thread.sleep(3000); Alert alert = driver.switchTo().alert(); alertText = alert.getText(); alert.accept(); System.out.println(alertText); Thread.sleep(1000); String num = driver.findElement(By.id("temporary_save_count")).getText(); System.out.println("임시저장 글 개수 : " + num); Thread.sleep(1000); } @AfterClass public static void tearDown() throws Exception { driver.quit(); } }
'지식메모 > 자동화' 카테고리의 다른 글
테스터로서 느낀 4가지 실수들 (0) | 2016.06.14 |
---|---|
appium 에서 특정영역을 좌우로 swipe 하기 (2) | 2016.05.23 |
Appium 자동화 상하좌우 스크롤 하기 (0) | 2016.03.23 |
Robotium API 기능 알아보기 (0) | 2016.02.18 |
로보티움 튜토리얼 실행해보기 (0) | 2015.09.04 |
Java 텍스트 파일 생성과 읽기를 이용한 누적시간 계산하기
파일 I/O를 이용한 텍스트 파일 생성과 읽기를 이용한 간단한 누적시간계산하기
1. 처음 시간과 끝 시간을 구한 후
-> 끝 시간 - 처음 시간 = 총 소요시간
2. 텍스트 파일 유무를 체크 한 뒤
3.파일이 없다면(처음 기록하는 시간이므로) 총 누적시간 = 총 소요시간이므로 이 시간을 totaltime.txt에 기록
4. 만약 파일이 있었다면 총 누적시간 = 이전 누적시간 + 총 소요시간이다.
-이를 다시 totaltime.txt 기록한다.(덮어 쓰게 됨)
이런 순서로 진행된다.
Time.java
import java.io.*; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Date; public class Time { static Date dt = new Date(); static Time timer = new Time(); static SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd, hh:mm:ss a"); static int playTimeCheck = 0; public long startTime() { long start = System.currentTimeMillis(); return start; } public long endTime() { long end = System.currentTimeMillis(); return end; } public long playTime(long l){ long longTime = 0; long end = timer.endTime(); //끝 시간 longTime = ( end - l ) / 1000; //끝 시간 빼기 처음시간 playTimeCheck = (int)longTime; // 플레이 시간 저장 System.out.println("플레이 시간 : " + (int)(longTime / 3600) + "시간 " + (int)(longTime % 3600 / 60) + "분 " + (int)(longTime % 3600 % 60) + "초"); return longTime; } public void totalTime(){ int total = 0; try { int play = playTimeCheck; //아까 계산한 플레이 시간 값 File file = new File("c:/totaltime.txt"); if(file.isFile()){ //totaltime.txt 존재 유무 체크 BufferedReader outReader = new BufferedReader(new FileReader("c:/totaltime.txt")); String read = outReader.readLine(); //누적 시간 읽기 total = Integer.parseInt(read); //읽은 값 total에 저장 total += play; //play시간과 total 더함 outReader.close(); BufferedWriter out = new BufferedWriter(new FileWriter("c:/totaltime.txt")); out.write(Integer.toString(total)); //합산된 total 값을 기록 out.close(); }else{ //파일이 없다면 BufferedWriter out = new BufferedWriter(new FileWriter("c:/totaltime.txt")); total = play; //처음에는 play시간이 곧 누적시간이므로 total에 play시간 대입 out.write(Integer.toString(total)); //파일에 기록 out.close(); } System.out.println("누적 플레이 시간 : " + ( total / 3600) + "시간 " + (total % 3600 / 60) + "분 " + (total % 3600 % 60) + "초"); } catch (IOException e) { System.err.println(e); // 에러가 있다면 메시지 출력 System.exit(1); } } }
public class TimeTest { public Time time = new Time(); //Time.java 객체선언 long startTime = 0; long endTime = 0; public void setUpGame() { startTime = time.startTime(); //시작과 동시에 시작시간 구함 } private void startPlaying() { finishGame(); } private void finishGame() { exitGame(); //끝날 때 시간 구함 } private void exitGame() { System.out.println("게임 종료"); time.totalTime(); //누적시간 계산 후 출력 } public static void main(String[] args) { DotComBust game = new DotComBust(); game.setUpGame(); game.startPlaying(); } }
대강 이런 식으로 사용가능하다..
'지식메모 > JAVA' 카테고리의 다른 글
JAVA JPasswordField 암호 값 가져오기 (0) | 2015.09.20 |
---|---|
문자열에서 숫자만 추출하기 (0) | 2015.09.02 |
숫자 천단위 콤마 입력하기 (0) | 2014.09.25 |
Json의 이해 (0) | 2013.11.05 |
대문자 소문자 서로 변환하기 (0) | 2013.10.08 |