The fields in question look like this
每个密码字符字段是随机选择的,用户需要在特定字段中输入相应的密码字符。例如,如果我的密码是箭鱼,在上图中我将被要求输入字母s,d和s。到目前为止,我对每个元素都有一个If
语句,这个语句几乎不理想,只有xpath的input[]
随每个字段而变化。
WebElement p1 = driver.findElement(By.xpath("/html/body/div[3]/div[3]
/div[2]/div/div[2]/div[1]/div[1]/div/div[2]/div[2]/div/form/table/tbody/tr[6]/td/input[1]
"));
if (p1.isEnabled()){
p1.click();
p1.sendKeys("s");
}
WebElement p2 = driver.findElement(By.xpath("/html/body/div[3]/div[3]
/div[2]/div/div[2]/div[1]/div[1]/div/div[2]/div[2]/div/form/table/tbody/tr[6]/td/input[2]
"));
if (p2.isEnabled()){
p2.sendKeys("d");
}
WebElement p3 = driver.findElement(By.xpath("/html/body/div[3]/div[3]
/div[2]/div/div[2]/div[1]/div[1]/div/div[2]/div[2]/div/form/table/tbody/tr[6]/td/input[3]
"));
if (p3.isEnabled()){
p3.sendKeys("s");
}
我有一个伪代码解决方案,但我不确切知道如何在Java中使用它。
for i =0;i<10;i++
associate i with a field
if passworfield is enabled
set password letter based on xpath
答案 0 :(得分:2)
如果您查看正在使用的xPath,它们只会在输入索引上有所不同。
对于我建议的方法,您需要有一个字符数组,您可以在其中保存密码。
因此,一种可能的方法是使索引具有或多或少的循环:
char[] password = new char[]{'p','a','s','s','w','o','r','d','1'};
for (int i = 0; i < 9; i++)
{
WebElement elem = driver.findElement(By.xpath("/html/body/div[3]/div[3]/div[2]/div/div[2]/div[1]/div[1]/div/div[2]/div[2]/div/form/table/tbody/tr[6]/td/input[" + (i + 1) + "]"));
if (elem != null && elem.isEnabled())
elem.sendKeys(Character.toString(password[i]));
}
请注意我正在使用Character.toString,因为我不确定sendKeys是否允许使用char而不是String。如果有可能,我建议你这样做。
编辑: 建议的另一种可能性是首先获得所有元素(这将提高性能,因为您不需要强迫Selenium一遍又一遍地分析网页..它将被简化为(某些类似):
char[] password = new char[]{'p','a','s','s','w','o','r','d','1'};
List<WebElement> elements = driver.findElements(By.xpath("/html/body/div[3]/div[3]/div[2]/div/div[2]/div[1]/div[1]/div/div[2]/div[2]/div/form/table/tbody/tr[6]/td/input"));
for (WebElement elem : elements)
{
if (elem.isEnabled())
elem.sendKeys(Character.toString(password[elements.indexOf(elem)]));
}
答案 1 :(得分:1)
我会选择费尔南多的答案,但这里的内容可能会有所帮助。
String s1 = "0,p,a,s,s,w,o,r,d,1";
String[] array = s1.split(",");
for (int i = 1; i < 10; i++){
String xpath = "/html/body/div[3]/div[3]/div[2]/div/div[2]
/div[1]/div[1]/div/div[2]/div[2]/div/form/table/tbody/
tr[6]/td/input[" + i + "]";
WebElement passw = driver.findElement(By.xpath(xpath));
if (passw.isEnabled()){
passw.sendKeys(array[i]);
}
}