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

Фотография

тесты java - webdriver


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 18

#1 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 06 декабря 2011 - 18:49

Здравствуйте! Я прошу прощения, если такая тема была уже на форуме, но, к сожалению, я не могу найти никакой информации...
Помогите пожалуйста с написанием тестов на java с webdriver.
Я работала по wiki selenium. про использование методов все вроде понятно.
но только как построить тест в плане структуры мне вообще не понятно...

я взяла простой пример вот с этого ресурса http://seleniumexamp.../tag/webdriver/
package com.eviltester.tutorial;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
 
import java.util.List;
 
public class FirstTest {
 
    WebDriver driver;
 
    @BeforeTest
    public void startDriver() {
        driver = new FirefoxDriver();
    }
 
    @AfterTest
    public void stopDriver() {
        driver.close();
    }
 
    @Test
    public void listCheesecakes() {
        driver.get("http://www.thecheesecakefactory.com/");
        driver.findElement(By.linkText("Menu")).click();
        driver.findElement(By.linkText("Cheesecake")).click();
        List<WebElement> cheesecakes = driver.findElements(By.xpath("id('leftNav_levelTwo')//li"));
 
        System.out.println(cheesecakes.size() + " cheesecakes:");
        for (int i=0; i<cheesecakes.size(); i++) {
            System.out.println(i+1 + ". " + cheesecakes.get(i).getText());
        }
    }
 
}

и при попытке воспроизведения теста мне пишет ошибку: Exception in thread "main" java.lang.NoSuchMethodError: main.
Само значение ошибки мне понятно. но куда именно мне нужно добавить класс main, чтоб все заработало?
Я раньше писала тесты только на php.
Может вы мне подскажете какие нибудь ресурсы, где можно посмотреть, как правильно построить тест?
  • 0

#2 Skuayer

Skuayer

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 06 декабря 2011 - 19:36

в тестах по сути метод main не нужен.

как вы запускаете тесты? вобще надо запускать соответсвующий runner и ему указывать тестовый класс, набор (xml)
  • 0

#3 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 07 декабря 2011 - 05:28

я просто в среде NetBeans запускаю, как обычный файл. а где можно взять этот xml?
  • 0

#4 Skuayer

Skuayer

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 07 декабря 2011 - 07:03

рекомендую к прочтению http://testng.org/do...ation-main.html

tesng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
 <suite name="Suite1" verbose="1" >
  <test name="Regression1"   >
     <classes>
       <class name="com.eviltester.tutorial.FirstTest"/>
    </classes>
 </test>
</suite>

и для запуска надо - java org.testng.TestNG testng.xml

не знаю как в нетбинсе, но в идее и в эклипсе есть плагины для testng
  • 0

#5 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 07 декабря 2011 - 07:08

спасибо!
  • 0

#6 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 07 декабря 2011 - 11:28

со всем разобралась, только есть один небольшой вопрос. Вот в phpunit если в файле было несколько тестов (функциий) и при этом при воспроизведении один из них падал, то начинал выполнятся следующий и так далее. на java также? просто сейчас пробовала: при падении одного из тестов остальные не воспроизводятся почему то..
  • 0

#7 Skuayer

Skuayer

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 07 декабря 2011 - 11:54

если тесты независимы то они должны запускать все...
покажи-те как вы делаете
  • 0

#8 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 07 декабря 2011 - 12:15

вот пример:
public class LogInLogOut extends main_class{
	
	@Test(alwaysRun=true)
   public void LoginLogoutUser() throws InterruptedException{
		
			this.WaitForElementLoad(15, "//a[text()='Войти']");
			driver.findElement(By.linkText("Войти")).click();
	//-- ввод неверных данных
			this.WaitForElementLoad(15, "//input[@name='username']"); 
	        driver.findElement(By.name("username")).sendKeys("test@gmail.com");
	        driver.findElement(By.name("password")).sendKeys("234");
	        driver.findElement(By.id("auth-submit")).click();
	        this.WaitForElementLoad(15, "//span[text()='Неправильный логин или пароль!']"); 
	        driver.findElement(By.xpath("//span[text()='Неправильный логин или пароль!']"));
	//-- ввод верных данных
	        driver.findElement(By.name("username")).clear();
	        driver.findElement(By.name("username")).sendKeys("test@gmail.com");
	        driver.findElement(By.name("password")).clear();
	        driver.findElement(By.name("password")).sendKeys("q2wsx'56'");
	        driver.findElement(By.id("auth-submit")).click();
	        this.WaitForElementLoad(15, "//a[text()='Тестовый Пользователь']"); 
	        driver.findElement(By.xpath("//a[text()='Тестовый Пользователь']"));
	//-- выход из системы
	        driver.findElement(By.linkText("Выйти")).click();
	        this.WaitForElementLoad(15, "//a[text()='Войти']");
	        driver.findElement(By.xpath("//a[text()='Войти']"));
	        driver.findElement(By.xpath("//a[text()='Регистрация']"));

   }
	
	   @Test(alwaysRun=true)
	   public void RegisterUser() throws InterruptedException{
		
		   this.WaitForElementLoad(15, "//a[text()='Регистрация']");
		   driver.findElement(By.xpath("//a[text()='Регистрация']")).click();
		   
		   this.WaitForElementLoad(15, "//h1[text()='Регистрация']");
		   driver.findElement(By.xpath("//h1[text()='Регистрация']"));
		   driver.findElement(By.xpath("//div[@id='reg-dialog']/form//input[@name='username']")).sendKeys("tttest11@mail.ru");
		   driver.findElement(By.name("firstName")).sendKeys("Иван");
		   driver.findElement(By.name("lastName")).sendKeys("Иванов");
		   driver.findElement(By.xpath("//div[@id='reg-dialog']/form//input[@name='password']")).sendKeys("123");
		   driver.findElement(By.name("confirm_password")).sendKeys("123");
		   
		  driver.findElement(By.xpath("//input[@value='Регистрация']")).click();
	}
}

если сваливается первый тест LoginLogoutUser(), то второй RegisterUser() не выполняется уже
  • 0

#9 Skuayer

Skuayer

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 07 декабря 2011 - 12:34

а как запускаете?
  • 0

#10 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 08 декабря 2011 - 05:33

я в эклипсе запускаю. через кнопку Run.
пробовала специально ввести неверный xpath в первый тест, запустила. он начал воспроизводится: на строке с неверным значением упал с исключением NoSuchElementExeption и все, второй тест дальше не начал воспроизводится
  • 0

#11 Misha_NSK

Misha_NSK

    Новый участник

  • Members
  • Pip
  • 58 сообщений


Отправлено 08 декабря 2011 - 06:54

не страдайте ерундой, кнопка Run там только дл яотладки. Напишите скрипт, например для ant'а, им и собирайте и запускайте и настраивайте как хотите.
  • 0

#12 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 08 декабря 2011 - 07:39

извините... не знала этого. спасибо за информацию...
  • 0

#13 Skuayer

Skuayer

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 08 декабря 2011 - 07:45

Мне кажется проблема в том что вы запускаете только один тестовый метод. Посмотрите, что у вас в Run Configuration
  • 0

#14 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 08 декабря 2011 - 15:35

А код теста полный ? не увидел что бы вы задали на каком URL Вы тест выполняете
  • 0

#15 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 08 декабря 2011 - 19:01

нет. это только кусок. url выше задается.
а на java как вообще правильно? может быть каждый тест отдельным файлом писать надо? или отдельным классом. потому что сейчас у меня все тесты в одном классе просто написаны разными функциями.
  • 0

#16 Skuayer

Skuayer

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 08 декабря 2011 - 19:25

тесты написаны правильно, к сожалению из того что вы представили не понять в чем у вас проблемы..... слишком мало информации (что в консоль пишется то? покажите ваш main_class и настройки запуска)
почитайте мануал для tеstng - eclipse http://testng.org/doc/eclipse.html и настройте так же или действительно можно попробовать запускать через аnt или maven
  • 1

#17 nstreltsov

nstreltsov

    Активный участник

  • Members
  • PipPip
  • 116 сообщений
  • ФИО:Стрельцов Николай Игоревич
  • Город:Москва


Отправлено 08 декабря 2011 - 20:10

не страдайте ерундой, кнопка Run там только дл яотладки. Напишите скрипт, например для ant'а, им и собирайте и запускайте и настраивайте как хотите.


Простите, а какая собственно разница запускаю я через Run или Ant или Maven?
Да, через Ant и Maven я могу передавать различные параметры, но IDE мне и без это соберет весь проект
  • 0

#18 nstreltsov

nstreltsov

    Активный участник

  • Members
  • PipPip
  • 116 сообщений
  • ФИО:Стрельцов Николай Игоревич
  • Город:Москва


Отправлено 08 декабря 2011 - 20:31

вот пример:

public class LogInLogOut extends main_class{
	
	@Test(alwaysRun=true)
   public void LoginLogoutUser() throws InterruptedException{
		
			this.WaitForElementLoad(15, "//a[text()='Войти']");
			driver.findElement(By.linkText("Войти")).click();
	//-- ввод неверных данных
			this.WaitForElementLoad(15, "//input[@name='username']"); 
	        driver.findElement(By.name("username")).sendKeys("test@gmail.com");
	        driver.findElement(By.name("password")).sendKeys("234");
	        driver.findElement(By.id("auth-submit")).click();
	        this.WaitForElementLoad(15, "//span[text()='Неправильный логин или пароль!']"); 
	        driver.findElement(By.xpath("//span[text()='Неправильный логин или пароль!']"));
	//-- ввод верных данных
	        driver.findElement(By.name("username")).clear();
	        driver.findElement(By.name("username")).sendKeys("test@gmail.com");
	        driver.findElement(By.name("password")).clear();
	        driver.findElement(By.name("password")).sendKeys("q2wsx'56'");
	        driver.findElement(By.id("auth-submit")).click();
	        this.WaitForElementLoad(15, "//a[text()='Тестовый Пользователь']"); 
	        driver.findElement(By.xpath("//a[text()='Тестовый Пользователь']"));
	//-- выход из системы
	        driver.findElement(By.linkText("Выйти")).click();
	        this.WaitForElementLoad(15, "//a[text()='Войти']");
	        driver.findElement(By.xpath("//a[text()='Войти']"));
	        driver.findElement(By.xpath("//a[text()='Регистрация']"));

   }
	
	   @Test(alwaysRun=true)
	   public void RegisterUser() throws InterruptedException{
		
		   this.WaitForElementLoad(15, "//a[text()='Регистрация']");
		   driver.findElement(By.xpath("//a[text()='Регистрация']")).click();
		   
		   this.WaitForElementLoad(15, "//h1[text()='Регистрация']");
		   driver.findElement(By.xpath("//h1[text()='Регистрация']"));
		   driver.findElement(By.xpath("//div[@id='reg-dialog']/form//input[@name='username']")).sendKeys("tttest11@mail.ru");
		   driver.findElement(By.name("firstName")).sendKeys("Иван");
		   driver.findElement(By.name("lastName")).sendKeys("Иванов");
		   driver.findElement(By.xpath("//div[@id='reg-dialog']/form//input[@name='password']")).sendKeys("123");
		   driver.findElement(By.name("confirm_password")).sendKeys("123");
		   
		  driver.findElement(By.xpath("//input[@value='Регистрация']")).click();
	}
}

если сваливается первый тест LoginLogoutUser(), то второй RegisterUser() не выполняется уже



Если я правильно понимаю, то у вас методы Before и After применяются для классов(попробуйте разнести тесты по разным классам и все будет работать нормально), посмотрите есть ли в testng @beforemetod и @aftermetod
  • 1

#19 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 09 декабря 2011 - 05:55

Спасибо огромное преогромное!!!! действительно вместо @Befor и @After надо было написать @beforemethod и @aftermethod. Теперь все работает как надо! очень благодарна всем кто помог)))
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных