#java #selenium #selenium-webdriver
#Ява #селен #селен-веб-драйвер
Вопрос:
У меня есть приведенный ниже простой код для проверки электронной почты после отправки формы. Иногда для отправки электронного письма требуется некоторое время. Я дал thread.sleep за 20 секунд до вызова метода электронной почты, и даже это меньше. Есть ли что-то, что я могу добавить в код, чтобы дождаться получения электронного письма?
public void Checkemail(String imap,String username, String password, String message) throws MessagingException { SoftAssert softAssert=new SoftAssert(); Properties props = System.getProperties(); props.setProperty("mail.store.protocol", "imap"); props.setProperty("mail.imaps.partialfetch", "false"); props.put("mail.imap.ssl.enable", "true"); props.put("mail.mime.base64.ignoreerrors", "true"); Session session = Session.getDefaultInstance(props, null); Store store = session.getStore("imap"); store.connect(imap, 993, username, password); Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_WRITE); System.out.println("Total Messages:" folder.getMessageCount()); System.out.println("Unread Messages:" folder.getUnreadMessageCount()); Message[] messages = folder.getMessages(); boolean test=false; if(folder.getUnreadMessageCount()!=0) { for (Message mail : messages) { Address[] froms = mail.getFrom(); String email = froms == null ? null : ((InternetAddress) froms[0]).getAddress(); if(!mail.isSet(Flags.Flag.SEEN) amp;amp; email.contains("abc@abc.com") amp;amp; mail.getSubject().contains(message)) { mail.setFlag(Flags.Flag.SEEN, true); softAssert.assertTrue(true,"Email received -gt;"); Reporter.log("Email received -gt;" mail.getSubject(), true); test=true; break; // folder.setFlags(messages, null, true); } } if (!test) { softAssert.assertTrue(false, "Email not received"); Reporter.log("Email not received -gt;" message, true); } } else { softAssert.assertTrue(false, "Email not received"); Reporter.log("Email not received -gt;" message, true); } }
Ответ №1:
Некоторое время назад я использовал это, чтобы дождаться доставки электронной почты по адресу mailinator.com:
WebDriverWait wait5m = new WebDriverWait(driver,300); Boolean new_msg = wait5m.until(new Functionlt;WebDriver, Booleangt; () { public Boolean apply(WebDriver driver) { Listlt;WebElementgt; msg = driver.findElements(By.linkText(usr_eml)); driver.navigate().refresh(); try {Thread.sleep(1000);} catch (InterruptedException e) {} if(msg.size()gt;0) { return true; } return false; } });
Комментарии:
1. Я не открываю веб-страницу для проверки электронной почты, так что это не сработает