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

Фотография

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

Login password

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

#1 WhiteCrow

WhiteCrow

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

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

Отправлено 04 июля 2014 - 11:35

Начал изучать Java и Selenium WedDriver. Появились первые сложности. Пытаюсь написать тест для смены пароля, но не могу отправить форму. Форма просто обновляется.Помогите пожалуйста.

 

Код выкладываю.

Сайт komus.ru

Login = "123451234@yandex.ru" и Pass = "qwerty123" рабочие - от тестового аккаунта.

 

package login;


import java.util.List;


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;


public class login1  {
    public static void main(String[] args) {


        WebDriver driver = new FirefoxDriver();


        driver.get("http://www.komus.ru/myoffice/login");
         //login
         WebElement element = driver.findElement(By.cssSelector("div.t0_block_shadow_2 > #email"));
         element.clear();
         element.sendKeys("123451234@yandex.ru");
         WebElement element1 =  driver.findElement(By.id("js-pass"));
         element1.clear();
         element1.sendKeys("qwerty123");
         WebElement element2 =  driver.findElement(By.xpath("(//input[@name='login'])[2]"));
         element2.click();
         //Сhange password
         WebElement element3 = driver.findElement(By.linkText("Смена пароля"));
         element3.click();
         driver.findElement(By.xpath("(//input[@name='password_old'])[1]")).clear();
         driver.findElement(By.xpath("(//input[@name='password_old'])[1]")).sendKeys("qwerty123");
         driver.findElement(By.xpath("(//input[@name='password'])[1]")).clear();
         driver.findElement(By.xpath("(//input[@name='password'])[1]")).sendKeys("qwerty1234");
         driver.findElement(By.xpath("(//input[@name='password_check'])[1]")).clear();
         WebElement mat = driver.findElement(By.xpath("(//input[@name='password_check'])[1]"));
         mat.sendKeys("qwerty1234");
         
         
         WebElement element4 = driver.findElement(By.xpath("(//input[@value='Продолжить'])"));
         element4.submit();
         //element4.click();
         
    }
}

  • 0

#2 Vitalik_V

Vitalik_V

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

  • Members
  • PipPip
  • 149 сообщений
  • ФИО:Виталий
  • Город:Харьков

Отправлено 04 июля 2014 - 11:42

А почему вы используете submit()?

Попробуйте через click();


  • 0

#3 WhiteCrow

WhiteCrow

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

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

Отправлено 04 июля 2014 - 11:45

А почему вы используете submit()?

Попробуйте через click();

Я и так и так попробовал.


  • 0

#4 appmen

appmen

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 04 июля 2014 - 12:19

если вы вместо element1-element4 будете использовать loginField, passwordField и т.д., то код будет читать намного легче (и вам тоже, особенно через некоторое время)


  • 1

#5 WhiteCrow

WhiteCrow

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

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

Отправлено 04 июля 2014 - 12:27

если вы вместо element1-element4 будете использовать loginField, passwordField и т.д., то код будет читать намного легче (и вам тоже, особенно через некоторое время)

Спасибо. Это приму на правку


  • 0

#6 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 04 июля 2014 - 15:36

А поподробнее, что значит форма просто обновляется? 


  • 0

#7 220v

220v

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

  • Members
  • PipPip
  • 107 сообщений
  • ФИО:Олег


Отправлено 04 июля 2014 - 19:34

cмотрите в сторону xUnit и аннотации Before, After, Test и т.д.

public class login1  {
    public static void main(String[] args) {

( и классы в Джаве с Большой буквы - Login1)


Откуда вы взяли цифры в квадратных скобках?

//input[@name='login'])[2]"));
//input[@name='password_check'])[1]

о селекторах id, name, xpath, css http://www.youtube.c...h?v=ahhaMbjqrxM

и еще раз посмотрите на ваш код (возможно некоторые селекторы лучше заменить)

 


  • 1

#8 asolntsev

asolntsev

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

  • Members
  • Pip
  • 64 сообщений
  • ФИО:Андрей Солнцев
  • Город:Таллинн

Отправлено 04 июля 2014 - 21:49

Добрый вечер!

Позвольте вам посоветовать библиотеку Selenide. Это обёртка вокруг Selenium WebDriver, позволяющая писать более короткие, читаемые и надёжные тесты.

Вот как выглядел бы ваш тест с использованием Selenide:

 

    open("http://www.komus.ru/myoffice/login");

    // login
    $("#middle #email").val("123451234@yandex.ru");
    $("#middle #js-pass").val("qwerty123");
    $("#middle").find(byValue("login")).click();

    // Сhange password
    $(By.linkText("Смена пароля")).click();
    $(By.xpath("(//input[@name='password_old'])[1]")).val("qwerty123");
    $(By.xpath("(//input[@name='password'])[1]")).val("qwerty1234");
    $(By.xpath("(//input[@name='password_check'])[1]")).val("qwerty1234");

    $(By.xpath("(//input[@value='Продолжить'])")).click();

  • 1

#9 ahmelevsky

ahmelevsky

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Хмелевский Артем

Отправлено 04 июля 2014 - 22:12

Проверил, действительно в FF такая ерунда, почему - пока не понял.

Код работает в IE.

(Конечно [1] не нужны, как и скобки, но дело не в них)

Что касается FF  - вручную отрабатывает, а через селениум - нет. Признаюсь, странно, страничка очень простая.

 

P.S. Извините, похерил ненароком ваш пароль ).

Но сделал взамен другой аккаунт 

123123@yandex.ru

qwerty123


  • 0

#10 220v

220v

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

  • Members
  • PipPip
  • 107 сообщений
  • ФИО:Олег


Отправлено 05 июля 2014 - 05:58

Проверил, действительно в FF такая ерунда, почему - пока не понял.

Код работает в IE.

(Конечно [1] не нужны, как и скобки, но дело не в них)

Что касается FF  - вручную отрабатывает, а через селениум - нет. Признаюсь, странно, страничка очень простая.

 

P.S. Извините, похерил ненароком ваш пароль ).

Но сделал взамен другой аккаунт 

123123@yandex.ru

qwerty123

Я вчера проверял код - немного поменял селекторы и все работало нормально + запускал тесты через JUnit.


  • 0

#11 ahmelevsky

ahmelevsky

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Хмелевский Артем

Отправлено 05 июля 2014 - 06:55

 

Проверил, действительно в FF такая ерунда, почему - пока не понял.

Код работает в IE.

(Конечно [1] не нужны, как и скобки, но дело не в них)

Что касается FF  - вручную отрабатывает, а через селениум - нет. Признаюсь, странно, страничка очень простая.

 

P.S. Извините, похерил ненароком ваш пароль ).

Но сделал взамен другой аккаунт 

123123@yandex.ru

qwerty123

Я вчера проверял код - немного поменял селекторы и все работало нормально + запускал тесты через JUnit.

 

 

Тут точно не в селекторах дело, они выглядят странно, но работать должны. Попробуйте запустить как есть, если не пробовали. Уверен, что у вас и с такими селекторами пройдет. 

Тут или версия FF или версия WebDriver или еще черт знает что. 


  • 0

#12 220v

220v

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

  • Members
  • PipPip
  • 107 сообщений
  • ФИО:Олег


Отправлено 05 июля 2014 - 07:57

Вот, что я нашел -  submit  нажимать не надо: 

element4.click();

всё, что изменил в его коде. Страница обновлятся из-за (это я так думаю, а на самом деле из-за чего не известно :)):

element4.submit();

У меня: FF  -  29.0, WD - 2.42.2


  • 0

#13 ahmelevsky

ahmelevsky

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Хмелевский Артем

Отправлено 05 июля 2014 - 16:59

Вот, что я нашел -  submit  нажимать не надо: 



element4.click();

всё, что изменил в его коде. Страница обновлятся из-за (это я так думаю, а на самом деле из-за чего не известно :)):



element4.submit();

У меня: FF  -  29.0, WD - 2.42.2

 

Хм. занятно. Дело в том, что и он так пробовал, и я так пробовал. Да и вообще по идее submit должен работать с любым элементом формы, в том числе и кнопкой. А с submit у вас воспроизводится "просто обновление"? 


  • 0

#14 WhiteCrow

WhiteCrow

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

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

Отправлено 07 июля 2014 - 11:25

 

Проверил, действительно в FF такая ерунда, почему - пока не понял.

Код работает в IE.

(Конечно [1] не нужны, как и скобки, но дело не в них)

Что касается FF  - вручную отрабатывает, а через селениум - нет. Признаюсь, странно, страничка очень простая.

 

P.S. Извините, похерил ненароком ваш пароль ).

Но сделал взамен другой аккаунт 

123123@yandex.ru

qwerty123

Я вчера проверял код - немного поменял селекторы и все работало нормально + запускал тесты через JUnit.

 

Привидите пример пожалуйста вашего кода


  • 0

#15 WhiteCrow

WhiteCrow

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

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

Отправлено 07 июля 2014 - 11:33

А поподробнее, что значит форма просто обновляется? 

Да. Пр ручном прогоне форма отправляется. При использовании IDE или WebDriver просто происходит обновление

 

cмотрите в сторону xUnit и аннотации Before, After, Test и т.д.

public class login1  {
    public static void main(String[] args) {

( и классы в Джаве с Большой буквы - Login1)


Откуда вы взяли цифры в квадратных скобках?

//input[@name='login'])[2]"));
//input[@name='password_check'])[1]

о селекторах id, name, xpath, css http://www.youtube.c...h?v=ahhaMbjqrxM

и еще раз посмотрите на ваш код (возможно некоторые селекторы лучше заменить)

 

 

Взял пример из селениум IDE при конвертировании на JUnit 4 селектор выглядел так. Я так понял он так находит несколько похожих полей, и цифрой в квадратной скобочке я указываю номер поля по списку сверху.

Спасибо за материал, теперь больше знаю о селекторах и как их искать.

 

Проверил, действительно в FF такая ерунда, почему - пока не понял.

Код работает в IE.

(Конечно [1] не нужны, как и скобки, но дело не в них)

Что касается FF  - вручную отрабатывает, а через селениум - нет. Признаюсь, странно, страничка очень простая.

 

P.S. Извините, похерил ненароком ваш пароль ).

Но сделал взамен другой аккаунт 

123123@yandex.ru

qwerty123

Нечего страшного. Объясните как запустить в IE?

 

 

Вот, что я нашел -  submit  нажимать не надо: 



element4.click();

всё, что изменил в его коде. Страница обновляется из-за (это я так думаю, а на самом деле из-за чего не известно :)):



element4.submit();

У меня: FF  -  29.0, WD - 2.42.2

 

Хм. занятно. Дело в том, что и он так пробовал, и я так пробовал. Да и вообще по идее submit должен работать с любым элементом формы, в том числе и кнопкой. А с submit у вас воспроизводится "просто обновление"? 

Да происходит простое обновление страницы, аналогично через .click

 

 

 

 

 

Я не знаю как решить эту проблему. Селекторы поменял(побывал разные). Подход изменил. Попробовал и через click, и через submit. Структуру немного изменил.

 

Если не сложно скиньте пожалуйста материал с визуальной частью где показывается как подключить IE/Chrome/Opera

 

        driver.get("http://www.komus.ru/myoffice/login");
         //login
         WebElement emailField = driver.findElement(By.cssSelector("div.t0_block_shadow_2 > #email"));
         emailField.clear();
         emailField.sendKeys("123123@yandex.ru");
         WebElement passwordField =  driver.findElement(By.id("js-pass"));
         
         passwordField.clear();
         passwordField.sendKeys("qwerty123");
         WebElement loginField =  driver.findElement(By.cssSelector(".t92_left_col input[alt='login']"));
         loginField.click();
         
         //Сhange password
         
         WebElement linkChange = driver.findElement(By.linkText("Смена пароля"));
         linkChange.click();
         //First fiend
         driver.findElement(By.xpath("(//input[@name='password_old']) ")).clear();
         driver.findElement(By.xpath("(//input[@name='password_old'])")).sendKeys("qwerty123");
         
         //Second fiend
         driver.findElement(By.xpath("(//input[@name='password'])")).clear();
         driver.findElement(By.xpath("(//input[@name='password'])")).sendKeys("qwerty1234");
         
         //Third fiend
         driver.findElement(By.xpath("(//input[@name='password_check'])")).clear();
         WebElement thirdFiend = driver.findElement(By.xpath("(//input[@name='password_check'])"));
         thirdFiend.sendKeys("qwerty1234");
         
         //Button enter
         driver.findElement(By.cssSelector(".t88_inside_block_3 input[name='change_password']")).submit();
         //driver.findElement(By.cssSelector(".t88_inside_block_3 input[name='change_password']")).click(); 

 


  • 0

#16 220v

220v

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

  • Members
  • PipPip
  • 107 сообщений
  • ФИО:Олег


Отправлено 08 июля 2014 - 08:57

package t;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;



public class Login1  {
    public static void main(String[] args) {

    	
        WebDriver driver = new FirefoxDriver();

       
        driver.get("http://www.komus.ru/myoffice/login");
         //login
         WebElement element = driver.findElement(By.cssSelector("div.t0_block_shadow_2 > #email"));
         element.clear();
         element.sendKeys("123123@yandex.ru");
         WebElement element1 =  driver.findElement(By.id("js-pass"));
         element1.clear();
         element1.sendKeys("qwerty1234");
         WebElement element2 =  driver.findElement(By.xpath("(//input[@name='login'])[2]"));
         element2.click();
         //Change password
         WebElement element3 = driver.findElement(By.linkText("Смена пароля"));
         element3.click();
         driver.findElement(By.xpath("(//input[@name='password_old'])[1]")).clear();
         driver.findElement(By.xpath("(//input[@name='password_old'])[1]")).sendKeys("qwerty1234");
         driver.findElement(By.xpath("(//input[@name='password'])[1]")).clear();
         driver.findElement(By.xpath("(//input[@name='password'])[1]")).sendKeys("qwerty123");
         driver.findElement(By.xpath("(//input[@name='password_check'])[1]")).clear();
         WebElement mat = driver.findElement(By.xpath("(//input[@name='password_check'])[1]"));
         mat.sendKeys("qwerty123");
         
         
         WebElement element4 = driver.findElement(By.xpath("(//input[@value='Продолжить'])"));
//         element4.submit();
         element4.click();
         
    }
}

вот код - ничего кроме одной строчки не менял...у вас точно версии совпадают с моими (ФФ/WD)?


  • 0

#17 WhiteCrow

WhiteCrow

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

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

Отправлено 08 июля 2014 - 09:22

package t;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;



public class Login1  {
    public static void main(String[] args) {

    	
        WebDriver driver = new FirefoxDriver();

       
        driver.get("http://www.komus.ru/myoffice/login");
         //login
         WebElement element = driver.findElement(By.cssSelector("div.t0_block_shadow_2 > #email"));
         element.clear();
         element.sendKeys("123123@yandex.ru");
         WebElement element1 =  driver.findElement(By.id("js-pass"));
         element1.clear();
         element1.sendKeys("qwerty1234");
         WebElement element2 =  driver.findElement(By.xpath("(//input[@name='login'])[2]"));
         element2.click();
         //Change password
         WebElement element3 = driver.findElement(By.linkText("Смена пароля"));
         element3.click();
         driver.findElement(By.xpath("(//input[@name='password_old'])[1]")).clear();
         driver.findElement(By.xpath("(//input[@name='password_old'])[1]")).sendKeys("qwerty1234");
         driver.findElement(By.xpath("(//input[@name='password'])[1]")).clear();
         driver.findElement(By.xpath("(//input[@name='password'])[1]")).sendKeys("qwerty123");
         driver.findElement(By.xpath("(//input[@name='password_check'])[1]")).clear();
         WebElement mat = driver.findElement(By.xpath("(//input[@name='password_check'])[1]"));
         mat.sendKeys("qwerty123");
         
         
         WebElement element4 = driver.findElement(By.xpath("(//input[@value='Продолжить'])"));
//         element4.submit();
         element4.click();
         
    }
}

вот код - ничего кроме одной строчки не менял...у вас точно версии совпадают с моими (ФФ/WD)?

 

FF 30 WD 2.42.2


  • 0

#18 WhiteCrow

WhiteCrow

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

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

Отправлено 08 июля 2014 - 09:26

Работает у меня только в GoogleGhrome, в FF все то же самое. как изменить версию FF? установить просто другой?


  • 0

#19 WhiteCrow

WhiteCrow

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

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

Отправлено 08 июля 2014 - 09:47

 
Не могу совершить авторизацию на главной странице сайта в сплывающей форме. Из похожих тем решения для себя не нашел.
 

Тестовый Login Marvin@yandex.ru Password qwerty1234
Cайт komus.ru

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;




public class Test1 {
    public static void main(String[] args) {
     
     //WebDriver driver = new FirefoxDriver();
     System.setProperty("webdriver.chrome.driver", "C:\\Atest\\Selenium\\Chrome\\chromedriver.exe");
     WebDriver driver = new ChromeDriver();



        driver.get("http://www.komus.ru/myoffice/login");
         //login
         WebElement emailField = driver.findElement(By.cssSelector("div.t0_block_shadow_2 > #email"));
         emailField.clear();
         emailField.sendKeys("marvin@yandex.ru");
         WebElement passwordField =  driver.findElement(By.id("js-pass"));
         
         passwordField.clear();
         passwordField.sendKeys("qwerty1234");
         WebElement loginField =  driver.findElement(By.cssSelector(".t92_left_col input[alt='login']"));
         loginField.click();
         
         //Сhange password
         driver.findElement(By.linkText("Смена пароля")).click();
         //First fiend
         driver.findElement(By.xpath("(//input[@name='password_old']) ")).clear();
         driver.findElement(By.xpath("(//input[@name='password_old'])")).sendKeys("qwerty1234");
         //Second fiend
         driver.findElement(By.xpath("(//input[@name='password'])")).clear();
         driver.findElement(By.xpath("(//input[@name='password'])")).sendKeys("qwerty1234");
         //Third fiend
         driver.findElement(By.xpath("(//input[@name='password_check'])")).clear();
         driver.findElement(By.xpath("(//input[@name='password_check'])")).sendKeys("qwerty1234");
      
         
         //Button enter
         driver.findElement(By.cssSelector(".t88_inside_block_3 input[name='change_password']")).click();  


         driver.findElement(By.linkText("Выход")).click();


         //Ввод пароля в сплывающей форме
         Actions actions = new Actions(driver);
         actions.moveToElement(driver.findElement(By.cssSelector("div.t24_vhod_link"))).build().perform();
         
         driver.findElement(By.cssSelector("#email")).clear();
         driver.findElement(By.cssSelector("#email")).sendKeys("marvin@yandex.ru");
         
         driver.findElement(By.cssSelector("#password")).clear();
         driver.findElement(By.cssSelector("#password")).sendKeys("qwerty1234");
         
         driver.findElement(By.cssSelector("div.t24_form_links * input")).click();
         
         
         //Сhange password
         driver.findElement(By.linkText("Смена пароля")).click();
         //First fiend
         driver.findElement(By.xpath("(//input[@name='password_old']) ")).clear();
         driver.findElement(By.xpath("(//input[@name='password_old'])")).sendKeys("qwerty1234");
         //Second fiend
         driver.findElement(By.xpath("(//input[@name='password'])")).clear();
         driver.findElement(By.xpath("(//input[@name='password'])")).sendKeys("qwerty1234");
         //Third fiend
         driver.findElement(By.xpath("(//input[@name='password_check'])")).clear();
         driver.findElement(By.xpath("(//input[@name='password_check'])")).sendKeys("qwerty1234");
         //Button enter
         driver.findElement(By.cssSelector(".t88_inside_block_3 input[name='change_password']")).click();  


         driver.quit();
    }
}

  • 0

#20 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 08 июля 2014 - 10:10

Модераториал: не дублируйте темы


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium


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

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