Перейти к содержимому

Подготовка к сертификации ISTQB FL
онлайн, начало 10 августа
Тестирование REST API
онлайн, начало 10 августа
Автоматизация функционального тестирования
онлайн, начало 7 августа
Тестирование веб-приложений 2.0
онлайн, начало 7 августа

WhiteCrow

Регистрация: 04 июл 2014
Offline Активность: 06 авг 2014 05:30
-----

Мои сообщения

В теме: Сохранение sreenshot при ошибке теста

15 июля 2014 - 08:41

Потому что у Вас блок catch ловит иксепшены только вида ArithmeticException.

Если в реалтайме вылетит иксепшн другого класса, Вы его просто не поймаете, но выполните финализацию без скриншота.
Измените на более общий:

catch (Exception e) {
     takeScreenshot(driver, name);
}

Кстати, мой вам совет:

1) не сохраняйте скриншоты в общей свалке - со временем всё тяжелее будет находить нужный.

2) под каждый запуск автотестов создавайте (автоматически) свой пул скриншотов в отдельном каталоге (дата + время запуска).

3) так как Вы не можете гарантировать уникальность имён скриншотов, заведите себе правило перед именем ставить какой-нибудь 100% уникальный идентификатор. Таймстамп является одним из наилучших решений, но он достаточно длинный. Так как пул скриншотов хранится в директории "дата + время запуска", то можно использовать таймстамп без даты. А в зависимости от скорости выполнения автотестов можно избавиться ещё и от часов.

 

P.S. всё это из личного опыта, основанного на граблях.

Спасибо за советы. Буду дорабатывать и учту это все.


В теме: Не работает перетаскивание ползунока(drop and drag)

14 июля 2014 - 09:32

delete

Страница с ошибками подгрузилась первый раз + увидел фильтры.

 

Смущает строка 

driver.switchTo().frame(0);

Фреймов я ни одного не увидел.

Возможно, фрейм(0) = базовый, но, может, всё-таки попробовать не переключаться, а?

Тем более, что класс с таким идентификатором существует, и причём единственный.

 

Да вы правы. Стоило всего лишь не переключаться между ними. Спасибо.


В теме: Ввод Login and Password в сплывающей форме

10 июля 2014 - 09:38

 


- Про первые 3 неудачных прогона. Попробуйте почистить проект, а потом перекомпилить. Вероятно остался мусор и выполнялся старый код.
- про ошибку "Timed out after 15 seconds waiting for visibility of element" 
Попытайтесь найти причину непостоянности ошибки. Продебажьте ваш код. 
Советовать что-то сложно ввиду не постоянности ошибки. 

 

Хорошо. Выполню все что вы сказали. + переписал сам код для того что бы было понятней читать его.(помогли немного)

 

package Komus.example;


import java.util.List;


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.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.TimeoutException;
import org.junit.Test;


public class Test3 {
private static final String url = "http://www.komus.ru/myoffice/login";
private static final String new_pass = "qwerty1234";
private static final String old_pass = "qwerty1234";
private static final String login = "marvin@yandex.ru";
private static final String message_text = "Пароль успешно изменен!";


@Test
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "C:\\Atest\\Selenium\\Chrome\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();


try {
driver.get(url);
firstEnter(login, old_pass, driver);
changePass(old_pass, new_pass, driver);
logout(driver);
        popupAuthorization(login, new_pass, driver);
        changePass(new_pass, old_pass, driver);
        logout(driver);
}
finally {
driver.quit();
}


}


private static void firstEnter(String login, String pass ,WebDriver driver) {


// Enter in site


By email = By.cssSelector("div.t0_block_shadow_2 > #email");
By password = By.id("js-pass");
By submit = By.cssSelector(".t92_left_col input[alt='login']");
WebElement emailField = driver.findElement(email);
emailField.clear();
emailField.sendKeys(login);
WebElement passwordField = driver.findElement(password);
passwordField.clear();
passwordField.sendKeys(old_pass);
WebElement submitField = driver.findElement(submit);
submitField.click();
}


private static void changePass(String oldPass, String newPass, WebDriver driver) {


//Смена пароля


By link_pass = By.linkText("Смена пароля");
   By password_old = By.name("password_old");
   By password = By.name("password");
   By password_check = By.name("password_check");
   By change_password = By.name("change_password");
   By success_message = By.xpath(".//*[contains(@class,'message_ok')]");
   
   driver.findElement(link_pass).click();
   
driver.findElement(password_old).clear();
driver.findElement(password_old).sendKeys(old_pass);


driver.findElement(password).clear();
driver.findElement(password).sendKeys(new_pass);


driver.findElement(password_check).clear();
driver.findElement(password_check).sendKeys(new_pass);


driver.findElement(change_password).click();


//Проверка смены пароля


new WebDriverWait(driver, 15).until(ExpectedConditions.textToBePresentInElement(success_message, message_text));




}


private static void logout(WebDriver driver) {
driver.findElement(By.linkText("Выход")).click();


}


private static void popupAuthorization(String login2, String pass2, WebDriver driver) {


   //Ввод пароля в сплывающей форме


   By auth_form = By.name("auth");
   By start_auth_link = By.cssSelector("div.t24_vhod_link");
   By email_input = By.cssSelector("#email");
   By pass_input = By.cssSelector("#password");
   By submit = By.cssSelector("div.t24_form_links * input");
   
   Actions actions = new Actions(driver);
   actions.moveToElement(driver.findElement(start_auth_link)).perform();
   new WebDriverWait(driver, 15).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(email_input));
   WebElement login_input = driver.findElement(auth_form).findElement(email_input);
   login_input.clear();
   login_input.sendKeys(login);
   WebElement password_input = driver.findElement(auth_form).findElement(pass_input);
    password_input.clear();
    password_input.sendKeys(new_pass);


   driver.findElement(auth_form).findElement(submit).click();
}


}

В теме: Ввод Login and Password в сплывающей форме

10 июля 2014 - 05:47

Попробуйте следующее:
1) Установить масштаб экрана:
в Win7: панель управления \ Экран \ 100%
2) Код:

actions.moveToElement(driver.findElement(By.cssSelector("div.t24_vhod_link"))).build().perform();

заменить на:

actions.moveToElement(driver.findElement(By.cssSelector("div.t24_vhod_link"))).perform();

3) Разворачивать браузер при запуске теста. Примерно так:

driver.manage().window().maximize();

Отпишитесь о результатах.

1)Установил масштаб экрана 100%(как и было)

2)Поменял заменил часть кода

3) Экран разворачивался до этого - аналогичным способом

 

 

Первые 3 прогона выдавалась все та же самая ошибка. Но потом 10 прогонов подряд все прошло нормально. Могу сказать что крашиться из за того что не открывается форма тест стал реже.

Starting ChromeDriver (v2.10.267521) on port 31449
Only local connections are allowed.
Exception in thread "main" org.openqa.selenium.TimeoutException: Timed out after 15 seconds waiting for visibility of element located by By.selector: #email
Build info: version: '2.42.2', revision: '6a6995d', time: '2014-06-03 17:42:03'
System info: host: 'acer-aspire_v5', ip: '192.168.0.16', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_05'
Driver info: driver.version: unknown
at org.openqa.selenium.support.ui.FluentWait.timeoutException(FluentWait.java:259)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:228)
at Komus.example.Test1.main(Test1.java:60)

В теме: Ввод Login and Password в сплывающей форме

09 июля 2014 - 11:56

 

1. валится на шаге открытия всплывающегося окна

Будьте, пожалуйста, конкретнее, слово "валится" слишком двусмысленное. Какое сообщение об ошибке?

Я предполагаю, что на самом деле "валится" на следующем действии, при попытке ввести значение в поле ввода, которое находится в этом окне. Потому что нет ожидания видимости, так что Selenium пытается вводить данные в поле, когда оно ещё не появилось. И ошибка должна быть типа InvalidElementStateException.

Если это так -- добавьте ожидания. Если не так -- расскажите, как именно "валится" у Вас.

 

 

Ожидание у меня добавлено:

//Ввод пароля в сплывающей форме
            Actions actions = new Actions(driver);
            actions.moveToElement(driver.findElement(By.cssSelector("div.t24_vhod_link"))).build().perform();
           (new WebDriverWait(driver, 15)).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#email")));
            driver.findElement(By.cssSelector("#email")).clear();
            driver.findElement(By.cssSelector("#email")).sendKeys("marvin@yandex.ru");

Но иногда всплывает вот такая ошибка. 

 

Starting ChromeDriver (v2.10.267521) on port 19691
Only local connections are allowed.
Exception in thread "main" org.openqa.selenium.TimeoutException: Timed out after 15 seconds waiting for visibility of element located by By.selector: #email
Build info: version: '2.42.2', revision: '6a6995d', time: '2014-06-03 17:42:03'
System info: host: 'acer-aspire_v5', ip: '192.168.0.16', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_05'
Driver info: driver.version: unknown
at org.openqa.selenium.support.ui.FluentWait.timeoutException(FluentWait.java:259)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:228)
at Komus.example.Test1.main(Test1.java:60)

Яндекс.Метрика
Реклама на портале