2016-08-11 5 views
1

Я пытаюсь ввести текст в два текстовых поля, и я пробовал почти все локаторы элементов, трюки Javascript и текст просто не попадают в поля. Тест проходит, но я вижу, что текст не был введен.Невозможно ввести текст в текстовые поля с помощью WebDriver

На сайте я упражняюсь на это https://www.chegg.com/auth?action=login&redirect=http%3A%2F%2Fwww.chegg.com%2F&reset_password=0

Два поля электронной почты и поле пароля.

Это должно работать, но не делает, предоставляя фрагмент кода:

WebElement emailField = driver.findElement(By.name("email")); 

WebElement passwordField = driver.findElement(By.name("password")); 

emailField.sendKeys("whatever"); 

passwordField.sendKeys("whatever"); 

Что я делаю неправильно?

+0

С By.name стратегией, первый элемент с согласованием значения атрибута имени местоположение будет возвращено. Я предлагаю вам использовать xpath для более точного тестирования, а также выполнить какое-либо событие в тесте, чтобы вы узнали успех или неудачу, просто ввод текста не имеет значения для тестов. – gks

ответ

0

На самом деле в ваших предоставленных website, два элемента присутствуют, используя By.name() локатор, где первый является невидимым и второй отображается, и вы взаимодействуете с первым элементом, который невидим на странице. Вот почему вы в беде, вы должны попробовать различный локатор для обнаружения правильного элемента, я хотел бы предложить вам попробовать использовать By.cssSelector(), как показано ниже: -

WebElement emailField = driver.findElement(By.cssSelector(".C-common-auth-signin-component input[name = 'email']")); 
emailField.sendKeys("whatever"); 

WebElement passwordField = driver.findElement(By.cssSelector(".C-common-auth-signin-component input[name = 'password']")); 
passwordField.sendKeys("whatever"); 
+0

Спасибо, это сработало! – user6084345

0

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

WebElement emailField = driver.findElement(By.xpath("//div[@id='eggshell-7']//input[@name='email']")).sendKeys("whatever"); 

Если вы все еще не в состоянии отправить, попробуйте отправить clear() перед тем sendkeys

+0

Нет, это ' xpath' не работает, потому что id 'div' динамически изменяется ... :) –

+0

Если он меняется, мы можем попробовать частичное совпадение с помощью contains и выглядит так, как текстовое поле является первым совпадением, поэтому оно будет: (// div [содержит (@ id, 'eggshell -')] // input [@ name = 'email']) [1] – ahly212

+0

Спасибо за ваш ответ! – user6084345