Советы по вводу данных в коробочное пространство мобильного приложения - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь смоделировать ввод данных в следующее поле ввода, как показано на следующем снимке экрана: enter image description here

Кодировка поля ввода в штучной упаковке выглядит следующим образом

<div class="input-group otp-container">
   <input type="tel" class="form-control form-input form-input--outline input-box-opt text-center text--md backupcode" style="" id="code-razer-8" maxlength="1" autocomplete="off" aria-required="true" name="OtpInfo.coderazer8" value="" required="">
   <input type="tel" class="form-control form-input form-input--outline input-box-opt text-center text--md" id="code-razer-1" maxlength="1" autocomplete="off" required="required" aria-required="true" name="OtpInfo.coderazer1" value="">
   <input type="tel" class="form-control form-input form-input--outline input-box-opt text-center text--md" id="code-razer-2" maxlength="1" autocomplete="off" required="required" aria-required="true" name="OtpInfo.coderazer2" value="">
   <input type="tel" class="form-control form-input form-input--outline input-box-opt text-center text--md" id="code-razer-3" maxlength="1" autocomplete="off" required="required" aria-required="true" name="OtpInfo.coderazer3" value="">
   <input type="tel" class="form-control form-input form-input--outline input-box-opt text-center text--md" id="code-razer-4" maxlength="1" autocomplete="off" required="required" aria-required="true" name="OtpInfo.coderazer4" value="">
   <input type="tel" class="form-control form-input form-input--outline input-box-opt text-center text--md" id="code-razer-5" maxlength="1" autocomplete="off" required="required" aria-required="true" name="OtpInfo.coderazer5" value="">
   <input type="tel" class="form-control form-input form-input--outline input-box-opt text-center text--md" id="code-razer-6" maxlength="1" autocomplete="off" required="required" aria-required="true" name="OtpInfo.coderazer6" value="">
   <input type="tel" class="form-control form-input form-input--outline input-box-opt text-center text--md backupcode" style="" id="code-razer-7" maxlength="1" autocomplete="off" aria-required="true" name="OtpInfo.coderazer7" value="" required="">
</div>

Я пытался отправить, например, строку целого числа "453678", эти цифры заполняются в первом поле, а не в каждом поле.

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

В настоящее время я использую следующий метод для достижения заполнения каждого поля: одно целое число.

driver.findElement(By.xpath("//*[@id=\"code-razer-1\"]")).sendKeys(bkcd1);
System.out.println("the backupcode is : " + bkcd1);
Thread.sleep(2000);

driver.findElement(By.xpath("//*[@id=\"code-razer-2\"]")).sendKeys(bkcd2);
System.out.print("the backupcode is : " + bkcd2);
Thread.sleep(2000);

driver.findElement(By.xpath("//*[@id=\"code-razer-3\"]")).sendKeys(bkcd3);
System.out.print("the backupcode is : " + bkcd3);
Thread.sleep(2000);

driver.findElement(By.xpath("//*[@id=\"code-razer-4\"]")).sendKeys(bkcd4);
System.out.print("the backupcode is : " + bkcd4);
Thread.sleep(2000);

driver.findElement(By.xpath("//*[@id=\"code-razer-5\"]")).sendKeys(bkcd5);
System.out.print("the backupcode is : " + bkcd5);
Thread.sleep(2000);

driver.findElement(By.xpath("//*[@id=\"code-razer-6\"]")).sendKeys(bkcd6);
System.out.print("the backupcode is : " + bkcd6);
Thread.sleep(2000);

driver.findElement(By.xpath("//*[@id=\"code-razer-7\"]")).sendKeys(bkcd7);
System.out.print("the backupcode is : " + bkcd7);
Thread.sleep(2000);

driver.findElement(By.xpath("//*[@id=\"code-razer-8\"]")).sendKeys(bkcd8);
System.out.print("the backupcode is : " + bkcd8);
Thread.sleep(2000);

Выше работает, но я хотел бы уменьшить строку кодов.

1 Ответ

1 голос
/ 12 марта 2020

Во-первых, сохраните все свои значения, которые необходимо заполнить, в поля ввода в HashMap.

Map<Integer, String> testData = new HashMap<>();
testData.put(1, "332133");
testData.put(2, "332123");
testData.put(3, "332143");
testData.put(4, "332167");
.....

Найдите поля ввода того же типа и затем выполните итерацию по l oop. Получите атрибут id каждого поля ввода и проверьте, является ли последний символ di git, если да, то получите соответствующее значение di git из HashMap и заполните соответствующее текстовое поле.

List<WebElement> textBoxes = driver.findElements(By.cssSelector("input[id^='code-razer-']"));

for(WebElement element: textBoxes) {
    String id = element.getAttribute("id");
    char lastChar = id.charAt(id.length()-1);

    if(Character.isDigit(lastChar)) {
        element.sendKeys(testData.get(Character.getNumericValue(lastChar)));
    }else {
        // handle if element is different 
    }
    Thread.sleep(1000);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...