捕获已启用字段的字符

时间:2018-02-22 20:19:04

标签: java selenium-webdriver

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

2 个答案:

答案 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]);
}
                        }