[JAVA 5#] [Web Automation 5#] Controlling STEEMIT web pages with Selenium #3 Actions [KR]

in #kr5 years ago (edited)

redsjavahouse1591357_1280.jpg
image source: pixabay


이번 시간은 태그에 액션을 추가해 본다. 지난 시간에 사용한 적 있는 click() 메서드외의 액션 메서드를 좀 더 상세하게 다뤄보도록 한다.
우선 sendKeys(), click(), submit()을 사용하여 STEEMIT에 로그인 후 글쓰기를 해보자. 물론 글을 쓰기만 하고 실제 전송은 하지 않는다. (머지 않은 미래에 AI 기술로 자동 글쓰기도 희망해 본다.)

분석

  1. 우상단 로그인은 By.linkText()로 불러온 후 click()
  2. 아이디, 비밀번호 태그는 By.name()으로 찾아 sendKeys()
  3. 로그인 영역이 form 태그로 되어 있으므로 submit()로 로그인
  4. 글쓰기 버튼이 두 개 검색되는데 하나는 화면에 표시되고, 하나는 표시되지 않으므로 isDisplayed()로 분기처리 후 클릭
  5. 에디터 본문에 sendKeys()로 텍스트 입력. 일반 String과 Selenium에서 제공하는 Keys enum으로 키보드의 키를 인자로 입력 가능하다. 두개 이상의 키를 섞어서 사용할 경우 Keys.chord()로 조합하여 사용하면 된다. 또한 가변인자이므로 동시에 여러개 인자 입력 가능
package com.steem.webatuo;

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import io.github.bonigarcia.wdm.WebDriverManager;

public class Steemit {

 public static void main(String[] args) throws InterruptedException {
 WebDriverManager.chromedriver().setup();
 WebDriver driver = new ChromeDriver();
 driver.get("https://steemit.com/@june0620/feed");
 driver.manage().window().maximize();
 driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
 
 //Click the login button
 driver.findElement(By.linkText("로그인")).click();
 // type id
 driver.findElement(By.name("username")).sendKeys("june0620");
 // type pw and submit
 WebElement pw = driver.findElement(By.name("password"));
 pw.sendKeys(Password.getPw());
 pw.submit();
 Thread.sleep(5000);
 // Click the write Button 
 List<WebElement> writeBtns = driver.findElements(By.xpath("//a[@href='/submit.html']"));
 for(WebElement writeBtn : writeBtns) {
 if(writeBtn.isDisplayed()) {
 writeBtn.click();
 Thread.sleep(2000);
 //type Text and Keys
 WebElement editor = driver.findElement(By.xpath("//textarea[@name='body']"));
 String keys = Keys.chord(Keys.LEFT_SHIFT, Keys.ENTER);
 editor.sendKeys("hello!! world", keys, "hello!!! STEEMIT", Keys.ENTER, "안녕, 스팀잇", Keys.ENTER, "你好!似提姆");
 break;
 }
 }
 
 Thread.sleep(5000);
 driver.quit();
 }

}

영상:

https://youtu.be/FVL4VsU6qiM

ETC.

selenium 의 Actions class로 마우스, 키보드의 액션을 더 상세하게 할 수 있다.
Actions class에는 clickAndHold, contextClick, doubleClick, dragAndDrop, moveToElemen 등 메서드가 지원된다. 👇
image.png

Sort:  

你今天过的开心吗?来一份新手村小卖部的美食吧!@teamcn-shop倘若你想让我隐形,请回复“取消”。

你好鸭,june0620!

@cnbuddy给您叫了一份外卖!

@davidchen 勇敢 迎着闪电 骑着拖把 给您送来
新年快乐!

吃饱了吗?跟我猜拳吧! 石头,剪刀,布~

如果您对我的服务满意,请不要吝啬您的点赞~
@onepagex

스팀잇에서는 보기 드문 자바 코드군요. 저도 안드로이드 앱 개발자라 자바를 주로 사용하고 있습니다. ^^

저는 아는게 자바밖에 없네요^^ 그것도 조금만... ㅎㅎ
안드로이드 앱 개발자시군요~ 부럽습니다^^

Posted using Partiko Android

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.028
BTC 60265.23
ETH 2324.47
USDT 1.00
SBD 2.55