2014-01-05 3 views
16

Я не могу использовать какое-либо значение в своем приложении с помощью веб-драйвера. Мое приложение использует фреймы. Используя следующую команду, я могу очистить значение моего текстового поля driver.findElement(By.name("name")).clear(); Но это не позволяет ставить любое значение, используя следующую команду: driver.findElement(By.name("name")).sendKeys("manish");sendkeys не работает в Selenium Webdriver

даже хотя команда нажмите кнопку для работы на той же странице.

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

Заранее спасибо.

+0

Уверены, что вы сосредоточены на правильной рамке? – Brian

+0

какие ошибки вы получаете? можете ли вы предоставить трассировку стека? – Amith

+0

Да, я сосредоточен на правильном фрейме, иначе я полагаю, что следующая команда не должна работать «driver.findElement (By.name (« name »)). Clear()», в режиме отладчика перед выполнением следующей команды я добавляю некоторое значение, которое очищает используя это, поэтому он должен сосредоточиться на правильной рамке. И также удивительно, что я не получаю никакой ошибки при выполнении следующих команд: – user3162976

ответ

2

Попробуйте щелкнуть по текстовому полю перед отправкой ключей.

Это может быть, что вам нужно, чтобы вызвать событие на поле перед входом и, надеюсь, щелчок сделает это

+0

Как мы можем щелкнуть по JavaScript, пожалуйста, предложите – user3162976

+0

Это не работает в моем случае – user3162976

1

Использование JavaScript нажать в поле и затем использовать SendKeys() для ввода значений. У меня была аналогичная проблема в прошлом с кадрами. Javascript - лучший способ.

+0

Как я могу щелкнуть по JavaScript. Я был бы очень благодарен, если бы вы могли предоставить мне код – user3162976

+1

Я бы сказал, что Javascript никогда не должен «быть лучшим способом». Это должно быть только последнее средство. Автоматизация с выполнением javascript на самом деле не доказывает, что приложение работает через взаимодействие с пользователем, но оно работает, если вы запускаете javascript напрямую. Я бы всегда пробовал много других идей с помощью Selenium API, используя «Действия» для перемещения мыши над полем и т. Д. (Т. Е. Запускать javascript через взаимодействие, а не выполнение). –

0

Попробуйте использовать Javascript для отправки keys().

WebElement element = driver.findElement(By.name("name")); 
JavascriptExecutor executor = (JavascriptExecutor)driver; 
executor.executeScript("arguments[0].click();", element); 

Более подробную информацию о Javascript Исполнителю можно найти @ JavascriptExecutor - Selenium

0

Первый контроль водителя пропуск кадра с использованием ----

driver.switchTo().frame("pass id/name/index/webelement"); 

После этого выполняют операцию, которую вы хотите сделать на webelement присутствует внутри рамки -

driver.findElement(By.name("name")).sendKeys("manish"); 
21

Я также h объявление, что проблема, а также раньше. Но то, что я сделал, чтобы заставить его работать, -

myInputElm.click(); 
myInputElm.clear(); 
myInputElm.sendKeys('myString'); 
+0

Да. У меня есть теория, почему это так. Я думаю, что те из нас, кого это затронуло, могут быть из-за того, что элемент, который мы пытаемся отправить, находится в кадре, и, возможно, это помогает селену добраться до него? СПАСИБО! –

-2

Обычно я сохраняю временную переменную. Это должно сработать.

var name = element(by.id('name')); 
name.clear(); 
name.sendKeys('anything'); 

Надеюсь, это поможет.

0

Я столкнулся с той же проблемой, когда копирование также не работает для этого текстового поля. Ниже код работает отлично для Ме-

WebDriver driver = new FirefoxDriver(); 
String mobNo = "99xxxxxxxx"; 
WebElement mobileElementIrs = 
driver.findElement(By.id("mobileNoPrimary")); 
mobileElementIrs.click(); 
mobileElementIrs.clear(); 
mobileElementIrs.sendKeys(mobNo); 
0

Щелкнув элемент работает для меня тоже, однако, другое решение, которое я нашел в том, чтобы ввести значение с помощью JavaScript, который не требует элемент иметь фокус:

var _element= driver.FindElement(By.Id("e123")); 
IJavaScriptExecutor js = (IJavaScriptExecutor)driver; 
js.ExecuteScript("arguments[0].setAttribute('value', 'textBoxValue')", _element); 
0

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

getDriver().findElement(By.id(idValue)).clear(); 
getDriver().findElement(By.id(idValue)).sendKeys(text); 

значение в «тексте» не completetelly писать на вход, представьте себе, был "Patrick "несколько раз пишут" П "еще один" Пэт ", ...так что тест не

Что я сделал, чтобы исправить это было временное решение, и использовать Javascript

((JavascriptExecutor)getDriver()).executeScript("$('#"+idValue+"').val('"+value+"');"); 

Теперь прекрасно

Вместо

driver.findElement(By.id("idValue")).sendKeys("text"); 

использование,

((JavascriptExecutor)getDriver()).executeScript("$('#"+"idValue"+"').val('"+"text"+"');"); 

Этот работал на меня.

Смежные вопросы