Created
August 15, 2014 01:30
-
-
Save Karasiq/d812c7e0043f59587636 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import static org.junit.Assert.fail; | |
import java.util.concurrent.TimeUnit; | |
import org.junit.After; | |
import org.junit.Before; | |
import org.junit.Test; | |
import org.openqa.selenium.Alert; | |
import org.openqa.selenium.By; | |
import org.openqa.selenium.NoAlertPresentException; | |
import org.openqa.selenium.NoSuchElementException; | |
import org.openqa.selenium.WebDriver; | |
import org.openqa.selenium.firefox.FirefoxDriver; | |
import org.openqa.selenium.support.ui.Select; | |
public class TranslateWithGoogleScript { | |
private WebDriver driver; | |
private String baseUrl; | |
private boolean acceptNextAlert = true; | |
private StringBuffer verificationErrors = new StringBuffer(); | |
@Before | |
public void setUp() throws Exception { | |
driver = new FirefoxDriver(); | |
baseUrl = "http://site.com"; | |
//тут я убрал урл, чтобы не было стыдно за сайты нашей фирмы и, аналогичного качества, мои тесты. | |
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS); | |
// Идем на тестовый и авторизируемся | |
driver.get(baseUrl + "/admin/translate"); | |
driver.findElement(By.id("LoginForm_username")).clear(); | |
driver.findElement(By.id("LoginForm_username")).sendKeys("admin"); | |
driver.findElement(By.id("LoginForm_password")).clear(); | |
driver.findElement(By.id("LoginForm_password")).sendKeys("123456"); | |
driver.findElement(By.name("yt0")).click(); | |
} | |
@Test | |
public void testTranlateScript() throws Exception { | |
// Инициализируем бесконечный цикл переводов. Должен переводить пока не | |
// кончатся тексты, ну или пока не зависнет. Потом кинет Exception. | |
int i = 1; | |
while (true) { | |
int j = 1; | |
// Фильтруем по непереведенному на какой-то язык и нажимаем первую | |
// ссылку "Перевести". Нужно указывать алиас языка на который | |
// переводим в фильтре. | |
driver.findElement(By.id("content_filter_header")).click(); | |
System.out.println(i | |
+ "." | |
+ j | |
+ " " | |
+ "начинаем настройку фильтра " | |
+ driver.findElement(By.id("content_filter_header")) | |
.toString()); | |
j++; | |
new Select(driver.findElement(By.id("filter-lang-type"))) | |
.selectByVisibleText("Не переведено на язык(и)"); | |
driver.findElement(By.id("filter-lang-alias-en")).click(); | |
System.out.println(i | |
+ "." | |
+ j | |
+ " " | |
+ "заканчиваем настройку фильтра " | |
+ driver.findElement(By.id("filter-lang-alias-en")) | |
.toString()); | |
j++; | |
driver.findElement(By.name("btn_filter")).click(); | |
System.out.println(i + "." + j + " " | |
+ "нажимаем на кнопку Применить " | |
+ driver.findElement(By.name("btn_filter")).toString()); | |
j++; | |
driver.findElements(By.linkText("Перевести")).get(0).click(); | |
System.out.println(i | |
+ "." | |
+ j | |
+ " " | |
+ "нажимаем на первую ссылку Перевести " | |
+ driver.findElements(By.linkText("Перевести")).get(0) | |
.toString()); | |
j++; | |
// Ищем оригинальный текст и присваеваем его переменной | |
for (int second = 0;; second++) { | |
if (second >= 60) | |
fail("timeout"); | |
try { | |
if (isElementPresent(By.id("original-text"))) | |
break; | |
} catch (Exception e) { | |
} | |
Thread.sleep(1000); | |
} | |
// driver.findElement(By.id("original-text")).isDisplayed(); | |
String text_to_translate = driver.findElement( | |
By.id("original-text")).getText(); | |
System.out.println(i + "." + j + " " + "текст получен: '" | |
+ text_to_translate + "' " | |
+ driver.findElement(By.id("original-text")).toString()); | |
j++; | |
if ((text_to_translate == null) || (text_to_translate.equals(""))) { | |
System.out.println(i + "." + j + " " | |
+ "Выход по break (пустой текст):"+ "'" + text_to_translate + "'"); | |
j++; | |
break; | |
} | |
// Вот это по идее должно не допускать, пустые стринги в тех | |
// случаях, если не сработал локатор. | |
// Идем в гугл и переводим текст из переменной. Тут нужно | |
// указывать | |
// алиасы языков с которого и на который переводим. | |
driver.get("https://translate.google.com/#ru/en/" | |
+ text_to_translate); | |
// Ждем элемент с переведенным текстом и присваиваем его новой | |
// переменной. | |
driver.findElement(By.id("source")).isDisplayed(); | |
String text_translated = driver.findElement(By.id("result_box")) | |
.getText(); | |
// Возвращаемся на сайт и снова точно также фильтруем. | |
driver.get(baseUrl + "/admin/translate"); | |
driver.findElement(By.id("content_filter_header")).click(); | |
System.out.println(i | |
+ "." | |
+ j | |
+ " " | |
+ "снова начинаем настройку фильтра " | |
+ driver.findElement(By.id("content_filter_header")) | |
.toString()); | |
j++; | |
new Select(driver.findElement(By.id("filter-lang-type"))) | |
.selectByVisibleText("Не переведено на язык(и)"); | |
driver.findElement(By.id("filter-lang-alias-en")).click(); | |
System.out.println(i | |
+ "." | |
+ j | |
+ " " | |
+ "снова заканчиваем настройку фильтра " | |
+ driver.findElement(By.id("filter-lang-alias-en")) | |
.toString()); | |
j++; | |
driver.findElement(By.name("btn_filter")).click(); | |
System.out.println(i + "." + j + " " | |
+ "снова нажимаем на кнопку Применить " | |
+ driver.findElement(By.name("btn_filter")).toString()); | |
j++; | |
driver.findElements(By.linkText("Перевести")).get(0).click(); | |
System.out.println(i | |
+ "." | |
+ j | |
+ " " | |
+ "снова нажимаем первую ссылку Перевести " | |
+ driver.findElements(By.linkText("Перевести")).get(0) | |
.toString()); | |
j++; | |
// driver.findElement(By.xpath(".//tbody/tr[2]/td[10]/a")).click(); | |
// Но в этот раз ищем нужный язык в аккордеоне и нажимаем на | |
// него. | |
// Необходимо корректировать путь в зависимости от положения | |
// языка в | |
// аккордеоне. | |
// driver.findElement( | |
// By.xpath(".//*[@id='ui-accordion-form_translate_accordion-header-4']/a")) | |
// .click(); | |
driver.findElement( | |
By.id("ui-accordion-form_translate_accordion-header-3")) | |
.click(); | |
System.out | |
.println(i | |
+ "." | |
+ j | |
+ " " | |
+ "выбираем нужный язык в аккордеоне " | |
+ driver.findElement( | |
By.id("ui-accordion-form_translate_accordion-header-3")) | |
.toString()); | |
j++; | |
driver.findElement(By.id("translate-form-en")).clear(); | |
driver.findElement(By.id("translate-form-en")).sendKeys( | |
text_translated); | |
System.out | |
.println(i | |
+ "." | |
+ j | |
+ " " | |
+ "в нужное поле вписан переведенный текст: '" | |
+ text_translated | |
+ "' " | |
+ driver.findElement(By.id("translate-form-en")) | |
.toString()); | |
j++; | |
driver.findElement(By.xpath("//button[@type='button']")).click(); | |
System.out.println(i | |
+ "." | |
+ j | |
+ " " | |
+ "нажимаем кнопку сохранить перевод " | |
+ driver.findElement(By.xpath("//button[@type='button']")) | |
.toString()); | |
j++; | |
// driver.findElements(By.cssSelector("html body div.ui-dialog.ui-widget.ui-widget-content.ui-corner-all.ui-draggable.ui-resizable.ui-dialog-buttons div.ui-dialog-buttonpane.ui-widget-content.ui-helper-clearfix div.ui-dialog-buttonset button.ui-button.ui-widget.ui-state-default.ui-corner-all.ui-button-text-only").get(0).click(); | |
// Переведено. Возвращаемcя, для запуска следующей итерации на | |
// правильной странице. | |
driver.get(baseUrl + "/admin/translate"); | |
System.out.println(i + "." + j + " " | |
+ "Возврат на /admin/translate"); | |
j++; | |
System.out.println(i + "." + j + " " + text_to_translate | |
+ " ---> " + text_translated); | |
j++; | |
System.out.println(""); | |
i++; | |
} | |
} | |
@After | |
public void tearDown() throws Exception { | |
driver.quit(); | |
String verificationErrorString = verificationErrors.toString(); | |
if (!"".equals(verificationErrorString)) { | |
fail(verificationErrorString); | |
} | |
} | |
private boolean isElementPresent(By by) { | |
try { | |
driver.findElement(by); | |
return true; | |
} catch (NoSuchElementException e) { | |
return false; | |
} | |
} | |
private boolean isAlertPresent() { | |
try { | |
driver.switchTo().alert(); | |
return true; | |
} catch (NoAlertPresentException e) { | |
return false; | |
} | |
} | |
private String closeAlertAndGetItsText() { | |
try { | |
Alert alert = driver.switchTo().alert(); | |
String alertText = alert.getText(); | |
if (acceptNextAlert) { | |
alert.accept(); | |
} else { | |
alert.dismiss(); | |
} | |
return alertText; | |
} finally { | |
acceptNextAlert = true; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment