Не удается получить данные из консоли во время теста на Java (TestNG)
Пишу автотест для сайта, на котором обязательна авторизация по номеру телефона. На указанный номер приходит смс с кодом, который надо ввести. Вопрос заключается в том, как реализовать ввод этого кода в процессе теста. Пробовала через Scanner, но на моменте ввода кода все застревает, не могу ничего ввести в консоли
@Test
public void AddPatientToArchive() throws IOException {
File file = new File("src/test/resources/chromedriver.exe");
System.setProperty("webdriver.chrome.driver", file.getAbsolutePath());
WebDriver driver = new ChromeDriver();
driver.navigate().to("https://cardiopro.mts.ru");
WebElement phoneField = driver.findElement(By.xpath("//input[@name='login']"));
phoneField.sendKeys(""); //тут номер телефона
WebElement furtherButton = driver.findElement(By.xpath("//span[@class='button__content']"));
furtherButton.click();
Scanner scan = new Scanner(System.in);
System.out.println("Enter code from SMS:");
String code = scan.nextLine();
WebElement codeGaps = driver.findElement(By.xpath("//input[@class='codeCheckBlock__codeCheck codeCheck -hidden -hideButton']"));
codeGaps.sendKeys(code);
}
Ответы (1 шт):
Вводить SMS
Вводить SMS при каждом запуске это довольно неудобное решение. Тесты пишутся для того чтобы они работали автоматически, без участия человека. Библиотеки тестов (TestNG в данном случае) подставляют свой поток ввода и поэтому считывать через System.in не получится.
Но если нужно только так и не иначе, то можно вывести тестировщику диалог для ввода SMS:
String code = JOptionPane.showInputDialog("Enter sms");
Альтернатива: заглушка
В качестве альтернативы можно поставить заглушку на SMS. Для этого нужно запускать тесты на тестовой версии сайта и предусмотреть возможность подменять сервис отправки SMS на свой. В тесте при этом будет проверяться не то, что пришло SMS, а то что сервис был вызван с корректными параметрами.
Еще, если код сохраняется в БД, то можно получать его оттуда и игнорировать отправленное сообщение.
Альтернатива: получать SMS автоматически.
Также можно реализовать получение SMS в коде теста. Варианты можете посмотреть здесь: How to automate OTP using selenium web driver?. Приведу несколько здесь:
- Подключить телефон к компьютеру и получать SMS через smslib либо appium.
- Использовать сервисы автоматизации, например IFTTT, чтобы переслать SMS на более доступный для теста ресурс (email, файл и т.п.) и прочитать его оттуда.
- Подключиться к SMS шлюзу и арендовать там SIM-карту или виртуальный номер.

