Herkese merhaba! Otomatik testlerde e-postaları okumak, birçok projede nasıl yapılacağını bilmeniz gerekebilecek bir püf noktasıdır. İşte nedeni ve bununla nasıl başa çıkılacağı… Bu neden önemli? Sistem e-posta gönderiyorsa, bunların gönderildiğini ve tıklanabilir bağlantılar da dahil olmak üzere içeriğin doğru olduğunu doğrulamak isteyebilirsiniz. Buna ihtiyaç duyduğunuzda olağan senaryolar şunlardır: Üye olmak. Hesap oluşturduğunuzda birçok platform bir onay e-postası gönderir ve e-postadaki bir onay bağlantısına tıklamanız gerekir. Faturalar. Uygulamanız herhangi bir ödeme yapıyorsa genellikle e-posta yoluyla çek veya fatura gönderir. Bu nedenle içeriklerinin doğru olup olmadığını da kontrol etmek isteyebilirsiniz. Sonuçlar. Tıbbi test sonuçları gibi. Deneyimlerime göre, bazı hastaneler test sonuçlarını tamamladıktan sonra bir e-posta gönderir (veya en azından raporu görüntüleyebileceğiniz kişisel bir sayfaya bir bağlantı). … Elbette bu listenin tamamı değil; bunlar yalnızca kariyerim boyunca en çok karşılaştığım kullanım örnekleri. Bu senaryoların doğrulanamaması, kullanıcıların e-posta alamamasına veya e-postalarda yanlış bilgi almasına neden olabilir. Projelerden birinde, süresi dolmuş bir tokenını erken bulmamıza yardımcı oldu. SendGrind Testlerde E-postaları Okumanın Komplikasyonları Nelerdir? E-postaları okumak zor bir iştir ancak imkansız değildir. İlk e-posta istemcileri, sunucudan e-posta almak için kullanıyordu, ancak küçük bir sorun var; e-postalar indirildikten sonra sunucudan siliniyor. POP3'ü Daha sonra protokolü geldi; sunucudaki e-postaları kolayca okumanıza olanak tanıyor. IMAP Problem şu - veya ilk kez bağlandığınızda (otomatik bir testi yeniden başlattığınızda olduğu gibi). bazı hizmetler bu protokolleri yasaklıyor kimliğinizi onaylamanızı sağlayacak Öte yandan, gibi bazı hizmetler, e-postalarınızı yönetmek için bir sağlar, ancak başka bir sorun daha vardır: belgeler ve kitaplıkları pek de kullanıcı dostu değildir (özellikle e-posta testiyle fazla çalışmayanlar için). Gmail REST API Burası devreye girdiği yer; e-postaları okumanıza ve hatta gibi tarayıcı otomasyon araçlarını kullanıyorsanız bunları tarayıcınızda açmanıza olanak tanıyan bir kitaplığı. gmail-getter'ın Playwright npm Gmail-Getter ile Gmail E-postalarını Okumak İlk önce paketi projenize yüklemeniz gerekir: npm install gmail-getter Google Cloud Console Projesi Oluşturun ve Kimlik Bilgilerini Alın giriş yapmak için kimlik bilgileri edinmeniz gerekir: , ve . Bu kimlik bilgileri, daha sonraki isteklerde (bir e-posta listesi veya tek bir e-posta vb. almak gibi) gerekli olan bir Erişim belirtecini almanızı sağlar. Gmail API'sine Müşteri Kimliği Müşteri Sırrı Yenileme jetonu İzlenecek adımlar: bir proje oluşturun. Google Cloud Console'da bölümünde oluşturun ( ) ve indirin. API ve Hizmetler OAuth kimlik bilgilerini otomatik testler için ihtiyacınız varsa tercihen orada uygulamasını seçin Masaüstü etkinleştirin. Gmail API'sini Bir Yenileme jetonu edinin. Yenileme jetonu almak için proje kökünde bir komut çalıştırmanız yeterlidir: npx gmail-getter get-refresh-token (veya paketi global olarak yüklediyseniz başka bir yerde) get-refresh-token dosyasını komutu çalıştıracağınız bir yere koymalısınız. credentials.json ⚠️ kimlik bilgileri dosya adı büyük/küçük harfe duyarlıdır ⚠️ Erişim Jetonu Alın Yapılandırma tamamlandıktan sonra otomatik testlerinizde bir Erişim belirteci almanız gerekir. Bunun için en iyi yerin genel kurulum (test çalıştırması başlamadan önce yürütülen bir işlev) olduğunu söyleyebilirim. Yani şöyle bir şey olacak: import {getToken} from 'gmail-getter' export default async function globalSetup() { process.env['ACCESS_TOKEN'] = await getToken( process.env.CLIENT_ID!, process.env.CLIENT_SECRET!, process.env.REFRESH_TOKEN! ) } Yukarıdaki örnekte, kesinlikle paketini de kurmanız gereken ortam değişkenleri kullanılmaktadır. dotenv Ancak işleri basit tutmak istiyorsanız, bu pasajı, belirtecin erişilmesine ihtiyaç duyduğunuz her yerde kullanabilirsiniz: const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' ) E-postaları Al Şu anda ihtiyacınız olan e-postayı bulmak için kullanıyor: Gmail'in REST API'si kendi sorgu dilini const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!') Yukarıdaki komut size bir e-posta nesnesi döndürür, ancak yine de içeriğini veya bağlantısını almanız gerekir. Yukarıdaki bağlantıdaki sözdizimini takip ederek kendi sorgunuza ☝️ from:squier7 subject:Test! kullanarak bir bağlantıyı ayrıştırabilirsiniz: Bir regex const link = parseLinkFromHtml(email!, /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im) kendi normal ifadenizle değiştirin ☝️ /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im VEYA e-postanın tüm HTML içeriğini alın ve tarayıcınızda işleyin: import {getToken, parseHtml} from 'gmail-getter' import {test} from '@playwright/test' test('Render an email', async ({page}) => { const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' ) const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!') // get an email const html = parseHtml(email!) // parse HTML from the email await page.setContent(html) // render the email in the browser }) Etraflı Otomatik testlerde e-postalarla çalışmanın zor olabileceği artık oldukça açık sanırım! Ancak bu püf noktalarını bilmek işleri çok daha kolaylaştırır. Yine de başka e-posta servislerini deneyebilir veya deneyebilirsiniz, ancak sizi temin ederim ki bu, bu kılavuzda olduğu kadar kolay olmayacaktır, çünkü sağladığı gibi kendinize ait bir yardımcı oluşturmanız gerekecektir. Burada. IMAP'i Gmail-getter'ın bulabilirsiniz. de. Oyun Yazarı örneğini GitHub'da Selvi örneği