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

Привет всем. Я начал изучать WebDriver+Java. Возникли первый проблемы.
Тестовый Login Marvin@yandex.ru Password qwerty1234
Cайт komus.ru

  1. Не работает смена пароля в FF 30 + WD 2.42.2. Точнее просто обновляется форма смены пароля. Но смены пароля не происходит. Должно после отправки высвечиваться сообщении об успешной или не успешной смене пароля. В Google Chrome этой проблемы нету. Если кто может помогите с этим.

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

Код:

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();
}

}

На что должен смениться пароль, если при смене ты вводишь одно и то же значение во все поля, старый пароль совпадает с новым?

Пару минимальных советов по коду:

  1. Код совершенно нечитаем. Советую вынести локаторы в отдельные переменные и обозвать их так, чтобы было понятно из контекста, что за действие проиходит
  2. Локаторы вида By.xpath("(//input[@name='password_old'])") советую заменить на By.name("password_old")

Сделал пароль на время одинаковым потому что, тест валилится на момент попытки зайти через всплывающую форму. Должно выводиться сообщение об успешной смене пароля. Оно выводиться и в IE and Google Chrome, а в FF просто обновляется страница.

Спасибо за советы буду менять.

Да я понимаю, но на тот момент когда делал - это локатор не работал.

по поводу ввода пароля во всплывающей форме, так должно работать:

 //Ввод пароля в сплывающей форме
    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)).build().perform();
    new WebDriverWait(driver, 5) .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(pass);
    driver.findElement(auth_form).findElement(submit).click();

для проверки сообщения о смене пароля я бы добавила

By success_message = By.xpath(".//*[contains(@class,'message_ok')]");
String message_text = "Пароль успешно изменен!";    
new WebDriverWait(driver, 5) .until(ExpectedConditions.textToBePresentInElement(success_message, message_text));

к сожалению проверить в ff30 не могу, но посмотрела бы скринкаст ошибки

Div.t24_form_links * input
Вот это локатор…

Насчет ошибки. Ее как таковой просто нету. Страничка просто обновляется и тест идет дальше.

А чем плох локатор?

А если вручную этот же кейс с теми же данными проделать, какой результат?

В ручную: выводиться сообщение

Пароль успешно изменен!

Вернуться в личный кабинет

ну если его расшифровать(если я не ошибаюсь конечно) то получится примерно такое:
элемент div с классом t24_form_links , в нем найти любой элемент у которого найти input. Опять же, может быть я ошибаюсь.
Но если это так - оптимальность этого локатора не самая лучшая.
В вашем случае - вроде как ничего не мешает сделать что-то типа: input[value=‘login’]

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

Ошибка прогона через FF 30 WD 2.42.2 через eclips luna(последняя версия)

Exception in thread “main” org.openqa.selenium.TimeoutException: Timed out after 5 seconds waiting for text (‘Пароль успешно изменен!’) to be present in element found by By.xpath: .//[contains(@class,‘message_ok’)]
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.Test3.main(Test3.java:59)
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {“method”:“xpath”,“selector”:".//
[contains(@class,‘message_ok’)]“}
Command duration or timeout: 25 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.htmlBuild 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: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=30.0, platform=XP, browserConnectionEnabled=true, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: ab1ce752-90c5-4b87-a33a-ed812cc75799
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:352)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:449)
at org.openqa.selenium.By$ByXPath.findElement(By.java:357)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:344)
at org.openqa.selenium.support.ui.ExpectedConditions.findElement(ExpectedConditions.java:730)
at org.openqa.selenium.support.ui.ExpectedConditions.access$0(ExpectedConditions.java:728)
at org.openqa.selenium.support.ui.ExpectedConditions$10.apply(ExpectedConditions.java:312)
at org.openqa.selenium.support.ui.ExpectedConditions$10.apply(ExpectedConditions.java:1)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:208)
… 1 more
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Unable to locate element: {“method”:“xpath”,“selector”:”.//*[contains(@class,‘message_ok’)]"}
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 .FirefoxDriver.prototype.findElementInternal_(file:///C:/Users/user/AppData/Local/Temp/anonymous8122607332698463527webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js:9470:7)
at .FirefoxDriver.prototype.findElement(file:///C:/Users/user/AppData/Local/Temp/anonymous8122607332698463527webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js:9479:3)
at .DelayedCommand.prototype.executeInternal_/h(file:///C:/Users/user/AppData/Local/Temp/anonymous8122607332698463527webdriver-profile/extensions/fxdriver@googlecode.com/components/command_processor.js:11455:11)
at .DelayedCommand.prototype.executeInternal_(file:///C:/Users/user/AppData/Local/Temp/anonymous8122607332698463527webdriver-profile/extensions/fxdriver@googlecode.com/components/command_processor.js:11460:7)
at .DelayedCommand.prototype.execute/<(file:///C:/Users/user/AppData/Local/Temp/anonymous8122607332698463527webdriver-profile/extensions/fxdriver@googlecode.com/components/command_processor.js:11402:5)

Проблема номер 2.

При прогоне через Google Chrome or IE у меня может возникнуть вот такая ошибка.(раз на раз не приходится)
(это проблема с вашим вариантом решения , должен признать у вас он более красивый, и с моим)

Тест просто валиватся из за ожидания. Непонятно почему.

Starting ChromeDriver (v2.10.267521) on port 16040
Only local connections are allowed.
Exception in thread “main” org.openqa.selenium.TimeoutException: Timed out after 5 seconds waiting for visibility of all elements 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.Test3.main(Test3.java:71)

я бы попробовала этот кусок завернуть в try{}catch и при фейле вывести findElements(email_input).size(), возможно(см. очень вероятно) локатор не уникальный, и пытается взаимодействовать с реально невидимым объектом. Это ко второму.

А первое - я вы все же смотрела в ошибки консоли или сети, возможно бага есть, но трудно уловимая, не похоже, что проблема с драйвером