2015-11-06 2 views
0

Я хочу передать переменную float 'f' через sendKeys в приведенной ниже программе. Может кто-нибудь, пожалуйста, дайте мне знать то же самое? На данный момент он метаетКак передать переменную через sendKeys в selenium webdriver?

«Метод sendKeys (CharSequence ...) в типе WebElement не применим для аргументов».

Код:

public static String isEditable(String s1) { 
    f=Float.parseFloat(s1); 
    System.out.println(f); 

    boolean bool=webDriver.findElement(By.xpath("expression")).isEnabled(); 
    if(bool) { 
     if((f<0) || (f>6)) { 
      error="Value must be between 0.00% and 6.00%"; 
      System.out.println(error); 
     } else { 
      webDriver.findElement(By.xpath(""expression")).sendKeys(f); 
     } 
    } else { 
     error="Please enter a valid Number"; 
    } 
    return error; 
} 
+0

или есть ли другой способ передать эту переменную, чтобы СПЭ поле? – Rahul

ответ

0

Преобразование поплавок к строка:

webDriver.findElement(By.xpath("...")).sendKeys(Float.toString(f)); 
+0

Thankyou.It сработал :) – Rahul

+1

@Raghu Вы должны использовать строку 's1', как указано ниже. Нет смысла разбирать его снова. Поэтому вместо 'sendKeys (Float.toString (f))' use 'sendKeys (s1)' ... – d0x

+0

Да d0x, что тоже будет работать.:) Но чтобы продолжить поток для пользовательской читаемости, я хотел, чтобы f передавался как строка.Во всяком случае, спасибо за ответ. – Rahul

0

Вы можете попробовать прохождение s1 вместо f. Потому что метод принимает строку, а не float.

Ваш метод должен выглядеть следующим образом:

String selector = "expression"; 
webDriver.findElement(By.xpath(selector)).sendKeys(f); 

И, пожалуйста, лучше использовать имена переменных, как userInput вместо s1 или userInputAsFloat вместо f или investmentInputVisible вместо bool и т.д.

0

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

  1. Я изменил имя функции, так как функция с именем isEditable() должен возвращать boolean, указывающий какое-то поле для редактирования. Это не то, что делает ваша функция, поэтому ему должно быть присвоено более подходящее имя. Я догадался, каково фактическое имя ... Я мог бы уйти, но вы должны называть его чем-то более похожим на то, что он на самом деле делает ... помещая текст в поле.

  2. Я удалил isEnabled(), потому что это должно быть сделано в функции, которая устанавливает номер фонда. Каждая функция должна делать одно и только одно. Эта функция проверяет, что пройденная скорость находится в допустимом диапазоне, а затем помещает ее в поле.

  3. Я удалил дубликат кода, который дважды очищал INPUT. Просто сделайте это один раз, сохраните его в переменной и повторно используйте эту переменную. В этом случае нет необходимости дважды очищать его.

  4. и, как d0x сказал, вы не должны преобразовать s1 строку в float, а затем обратно в string, когда вы sendKeys() ... просто отправить s1 строку. Перевод его обратно не помогает читабельности, это просто означает, что вы написали больше кода, чтобы кто-то после вас должен был понять. Благоприятный чистый код ... это всегда более читаемо.

    public static String enterRate(String s1) 
    { 
        f = Float.parseFloat(s1); 
        WebElement input = webDriver.findElement(By.xpath(".//*[@id='p_InvestmentSelection_4113']/div/div/div[5]/div/ul/li/div[3]/div[2]/label/div[1]/input")); 
        if ((f < 0) || (f > 6)) 
        { 
         error = "Value must be between 0.00% and 6.00%"; 
        } 
        else 
        { 
         input.sendKeys(s1); 
        } 
        return error; 
    } 
    
+0

Я узнал что-то из вашего отзыва. Спасибо! Однако я понимаю, что вам не ясно. Здесь, когда вводится действительный номер фонда, поле продажи должно быть включено. Итак, логика заключается в том, чтобы проверить, включено ли поле SalesCharge или нет, и затем ввести значение соответствующим образом. В целом есть валидация за мин. n максимальных значений. Таким образом, ошибка выбрасывается соответственно. Надеюсь, теперь это ясно. – Rahul

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