如何通过 selenium webdriver 中的 sendKeys 传递变量?
how to pass a variable through sendKeys in selenium webdriver?
我想通过下面的 sendKeys 传递浮点变量 'f' program.Can 有人请让我知道吗?截至目前,它正在抛出
"The method sendKeys(CharSequence...) in the type WebElement is not applicable for the arguments ".
代码:
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;
}
您可以尝试传递 s1
而不是 f
。因为该方法采用字符串,而不是浮点数。
您的方法应如下所示:
String selector = "expression";
webDriver.findElement(By.xpath(selector)).sendKeys(f);
并且请使用更好的变量名,例如 userInput
代替 s1
或 userInputAsFloat
代替 f
或 investmentInputVisible
代替 bool
等等
将浮点数转换为字符串:
webDriver.findElement(By.xpath("...")).sendKeys(Float.toString(f));
我知道你已经接受了一个答案,但我想稍微清理一下你的代码并给你一些反馈。
我更改了函数的名称,因为名为 isEditable()
的函数应该 return 一个 boolean
指示某个字段是否可编辑。那不是你的函数正在做的,所以应该给它一个更合适的名字。我猜想实际名称应该是什么......我可能会偏离,但你应该根据它的实际用途来命名它......将文本放入字段中。
我删除了 isEnabled()
检查,因为那应该在设置基金编号的函数中完成。每个功能应该做一件事,而且只做一件事。此函数验证通过的速率是否在有效范围内,然后将其放入字段中。
我删除了两次抓取 INPUT 的重复代码。只需执行一次,将其保存在一个变量中,然后重用该变量。这样的话,就没必要再刮两次了。
并且正如 d0x 所说,您不应该将 s1
字符串转换为 float
然后在 sendKeys()
时返回 string
...只需发送 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;
}
我想通过下面的 sendKeys 传递浮点变量 'f' program.Can 有人请让我知道吗?截至目前,它正在抛出
"The method sendKeys(CharSequence...) in the type WebElement is not applicable for the arguments ".
代码:
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;
}
您可以尝试传递 s1
而不是 f
。因为该方法采用字符串,而不是浮点数。
您的方法应如下所示:
String selector = "expression";
webDriver.findElement(By.xpath(selector)).sendKeys(f);
并且请使用更好的变量名,例如 userInput
代替 s1
或 userInputAsFloat
代替 f
或 investmentInputVisible
代替 bool
等等
将浮点数转换为字符串:
webDriver.findElement(By.xpath("...")).sendKeys(Float.toString(f));
我知道你已经接受了一个答案,但我想稍微清理一下你的代码并给你一些反馈。
我更改了函数的名称,因为名为
isEditable()
的函数应该 return 一个boolean
指示某个字段是否可编辑。那不是你的函数正在做的,所以应该给它一个更合适的名字。我猜想实际名称应该是什么......我可能会偏离,但你应该根据它的实际用途来命名它......将文本放入字段中。我删除了
isEnabled()
检查,因为那应该在设置基金编号的函数中完成。每个功能应该做一件事,而且只做一件事。此函数验证通过的速率是否在有效范围内,然后将其放入字段中。我删除了两次抓取 INPUT 的重复代码。只需执行一次,将其保存在一个变量中,然后重用该变量。这样的话,就没必要再刮两次了。
并且正如 d0x 所说,您不应该将
s1
字符串转换为float
然后在sendKeys()
时返回string
...只需发送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; }