Дождитесь получения электронной почты в selenium

#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. Я не открываю веб-страницу для проверки электронной почты, так что это не сработает