package jp.dip.arimodoki.connector;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.opera.OperaDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import cucumber.api.java.Before;
public class WebConnector {
private final static long DEFAULT_TIMEOUT = 5000;
private final String BROWSER_IE = "IE";
private final String BROWSER_EDGE = "Edge";
private final String BROWSER_FF = "FireFox";
private final String BROWSER_OPERA = "Opera";
private final String BROWSER_CR = "Chrome";
private final int BROWSER_TYPE_IE = 0;
private final int BROWSER_TYPE_EDGE = 1;
private final int BROWSER_TYPE_FF = 2;
private final int BROWSER_TYPE_OPERA = 3;
private final int BROWSER_TYPE_CR = 4;
private WebDriver driver = null;
private int DriverType;
private String screenShotPath = null;
private Actions builder = null;
public WebConnector() {}
public void selectWebDriver(String browser) {
this.DriverType = BROWSER_TYPE_CR;
if (browser.equals(BROWSER_IE)) {
this.DriverType = BROWSER_TYPE_IE;
} else if (browser.equals(BROWSER_EDGE)) {
this.DriverType = BROWSER_TYPE_EDGE;
} else if (browser.equals(BROWSER_FF)) {
this.DriverType = BROWSER_TYPE_FF;
} else if (browser.equals(BROWSER_OPERA)) {
this.DriverType = BROWSER_TYPE_OPERA;
}
this.setWebDriver();
}
private void setWebDriver() {
switch (this.DriverType) {
case BROWSER_TYPE_IE:
System.setProperty("webdriver.ie.driver", "./exe32bit/IEDriverServer.exe");
this.driver = new InternetExplorerDriver();
break;
case BROWSER_TYPE_EDGE:
System.setProperty("webdriver.edge.driver", "./exe/MicrosoftWebDriver.exe");
this.driver = new EdgeDriver();
break;
case BROWSER_TYPE_FF:
System.setProperty("webdriver.gecko.driver", "./exe64bit/geckodriver.exe");
this.driver = new FirefoxDriver();
break;
case BROWSER_TYPE_OPERA:
System.setProperty("webdriver.opera.driver", "./exe64bit/operadriver.exe");
this.driver = new OperaDriver();
break;
default:
System.setProperty("webdriver.chrome.driver", "./exe/chromedriver.exe");
DesiredCapabilities cap = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
cap.setCapability(ChromeOptions.CAPABILITY, options);
this.driver = new ChromeDriver(cap);
break;
}
this.builder = new Actions(this.driver);
this.driver.manage().timeouts().implicitlyWait(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS);
}
public void setWindowMax() {
if(this.DriverType != BROWSER_TYPE_CR) {
try {
this.driver.manage().window().maximize();
} catch (Exception e) {
this.driver.quit();
}
}
}
public void sleep(int sec) {
long msec = sec * 1000;
try {
Thread.sleep(msec);
} catch (Exception e) {
}
}
public WebDriver switchFrame(String selector) {
return this.driver.switchTo().frame(selector);
}
public void sleepFrame(String selector, String targetClass) {
String parentHandle = this.driver.getWindowHandle();
logger.log_info(this, "WindowHandle["+ parentHandle+"]");
WebElement iframe = this.driver.findElement(By.id(selector));
logger.log_info(this, "iframe["+ iframe.getLocation()+"]");
this.driver.switchTo().frame(iframe);
WebElement element =this.driver.findElement(By.className(targetClass));
this.driver.switchTo().window(parentHandle);
}
public void parentWindow() {
String parentHandle = this.driver.getWindowHandle();
this.driver.switchTo().window(parentHandle);
}
public void setScreenShotPath(String path) {
this.screenShotPath = path;
}
@Before
public void initSelenium() throws Exception {
}
public void destroySelenium() {
this.driver.quit();
}
public void openAndWait(String location) {
this.driver.navigate().to(location);
}
public void getScreenShot(String filename) {
String path = this.screenShotPath + "/" + filename;
if(this.DriverType != BROWSER_TYPE_CR) {
TakesScreenshot screen = (TakesScreenshot)this.driver;
Path capture = Paths.get(path);
try {
Files.write(capture, screen.getScreenshotAs(OutputType.BYTES));
} catch(Exception e) {
this.driver.quit();
}
}
}
public void inputAndWait(String selector, String value) {
try {
WebElement element = this.driver.findElement(By.id(selector));
element.sendKeys(value);
return;
} catch(Exception e) {
}
try {
WebElement element = this.driver.findElement(By.name(selector));
element.sendKeys(value);
} catch(Exception e) {
this.driver.quit();
}
}
public void inputEnterAndWait(String selector) {
try {
WebElement element = this.driver.findElement(By.id(selector));
element.sendKeys(Keys.RETURN);
return;
} catch(Exception e) {
}
try {
WebElement element = this.driver.findElement(By.name(selector));
element.sendKeys(Keys.RETURN);
} catch(Exception e) {
this.driver.quit();
}
}
public void btnClickAndWait(String value) {
try {
WebElement element = this.driver.findElement(
By.xpath("//input[@type=\"submit\" and @value=\"" + value + "\"]"));
element.click();
} catch(Exception e) {
this.driver.quit();
}
}
public void btnClickAndWait(String type, String label) {
try {
List element = this.driver.findElements(By.xpath("//input[@type=\"" + type + "\"]"));
for(WebElement entity : element) {
if(entity.getAttribute("value").equals(label)) {
entity.click();
break;
}
}
} catch(Exception e) {
this.driver.quit();
}
}
public void btnByblockClickAndWait(String selector, String value, int index) {
int i = 0;
try {
List element = this.driver.findElements(
By.xpath("//input[@type=\"" + selector + "\" and @value=\"" + value + "\"]"));
for(WebElement entity : element) {
if(i == index) {
entity.click();
break;
}
i++;
}
} catch(Exception e) {
this.driver.quit();
}
}
public void btnBynameClickAndWait(String selector) {
try {
WebElement element = this.driver.findElement(By.name(selector));
element.click();
} catch(Exception e) {
this.driver.quit();
}
}
public void clickAndWait(String text) {
try {
WebElement element = this.driver.findElement(By.linkText(text));
element.click();
} catch(Exception e) {
this.driver.quit();
}
}
public void clickHrefAndWait(String href) {
try {
WebElement element = this.driver.findElement(By.xpath("//a[@href='"+href+"']"));
element.click();
} catch(Exception e) {
}
}
public boolean isTextPresent(String text) {
WebElement content = this.driver.findElement(By.tagName("body"));
boolean res = content.getText().contains(text);
return res;
}
public void spanClickAndWait(String tagname, String text) {
int i = 0;
try {
List element = this.driver.findElements(By.tagName(tagname));
for(WebElement entity : element) {
if(entity.getText().equals(text)) {
entity.click();
break;
}
}
} catch(Exception e) {
this.driver.quit();
}
}
public void linkClickAndWait(String text) {
int i = 0;
try {
WebElement element = this.driver.findElement(By.linkText(text));
element.click();
} catch(Exception e) {
this.driver.quit();
}
}
public void assertTable(String className, List expect) {
WebElement table = this.driver.findElement(By.className(className));
List rows = table.findElements(By.tagName("tr"));
int columnCount = rows.get(0).findElements(By.xpath("./*")).size();
assertThat(rows.size() * columnCount, is(expect.size()));
int ix = 0;
for (WebElement row : rows) {
List cells = row.findElements(By.xpath("./*"));
for (WebElement cell : cells) {
assertThat(cell.getText(), is(expect.get(ix)));
ix++;
}
}
}
}
|