はい、どうもパニック障害怠惰エンジニアです。
ということで、作成途中なのですが今回はCypressとTypeScriptを使って、なんちゃってメールチェック自動化していきます。
いやー、いちいちログインを手動でして、アドレスとか目視確認したくないですわ。
でも、ほっておくとフォルダに貯まって後で仕分け面倒、でも自動振り分けするまでもないアドレスからだし・・・。
というのが面倒だった。
起動用バッチ(タスクスケジューラーにでも登録してね)
EmailCheck.bat
@echo off
chcp 65001
echo "メールの最新状態をチェックします"
REM ほかの関係のないメールのみの場合は削除します、対象のアドレスが付いたメールがある場合は削除せずに残します
REM cypress起動してGUIテストの間のみ表示
cd "ファイルパス"
npx cypress run --headed --spec "テストファイルパス"
msg %username% /W "メールボックス内のチェック作業終了しました。"
pause
メールチェック用のロジック
mailChecker.ts
describe("mail checker", () => {
//定数呼び出し
before(function () {
cy.fixture('test').then(function (testdata) {
this.testdata = testdata
})
})
// テストケース:メール件名で検索
it("mail check", function() {
// ログイン処理
cy.visit(this.testdata.url,'utf8');
cy.get('email要素').type(this.testdata.mail,'utf8');
cy.get("password要素").type(this.testdata.pass,'utf8');
cy.get("input").contains("ログインする").click();
//ログ出力
cy.log('Login successful')
//遷移後読み込み待機
cy.wait(8000);
//メールの件名を確認
cy.get("メールの受信欄要素").then(($p) => {
//var よりもletを使おう
let name , time = "";
// 対象の件名にあった場合 true false返る
cy.wait(8000);
if ($p.text().includes("メールアドレス名(部分一致)") === true) {
cy.log('True')
// 部分的に一致するが、削除してもいいアドレス用の処理(例えば会社の全体メールを指定)
if($p.text().includes("メールアドレス名(削除してもいい文字列があるアドレス名)") === true){
cy.log('削除していいよ')
// メール削除
cy.get('すべてのメール選択にチェック要素').click({ multiple: true })
cy.get('削除ボタン要素').click()
// 処理終了するために返す
return
}
// 通常処理(確認したい人のメールアドレス)
cy.log('確認したいメールあるよ')
cy.get('要素').should(($div) => {
time = $div.text()
//差出人の名前と時間をローカルフォルダのjsonに記載しておく
cy.writeFile("ローカルパス/jsonファイル", { name:name,time:time }, 'utf8')
})
} else if($p.text().includes("アドレス") === false) {
cy.log('ないよ')
// 対象のメールがない場合
// メール削除
cy.get('すべてのメール選択にチェック要素').click({ multiple: true })
cy.get('削除ボタン要素').click()
} else {
// 何か後で作るかも
}
return
});
});
});