How to read OTP from gmail in protractor?

时间:2017-06-09 12:47:39

标签: javascript email protractor

Conf.js

How to read OTP from gmail. I tried but am not able to and also am not getting any error.

2 个答案:

答案 0 :(得分:2)

您可以使用一些邮件侦听器方法来获得更清洁的解决方案,inbucketmail-listener2是在e2e测试中出于电子邮件阅读目的的两种流行解决方案。

我个人建议使用inbucket来实现它的简单性。您可以将其作为带有simple command mentioned here的docker容器运行,然后使用this Javascript Client使用公开的API。

您还可以使用mail-listener2,它也提供相同的功能,但需要在python detect.py --weights ./checkpoints/yolov4-416.tflite --size 416 --model yolov4 --image ./data/kite.jpg --framework tflite 文件中进行一些配置。

答案 1 :(得分:0)

这是我提出的代码。我假设OTP位于收件箱中的第一封电子邮件中。关闭允许类似消息组合在一起的gmail设置也很有帮助,因为这可能会导致问题。 (请原谅使用browser.driver.sleep(),这可以替换)

var tokenKey;
function getKey(a) {
// Open email from *******@gmail.com
// Its a non-angular site, so need to turn off synchronization
browser.ignoreSynchronization = true;
browser.driver.sleep(3000);

// Opens a new tab in which you retrieve OTP
browser.driver.executeScript(function() {
  (function(a){
  document.body.appendChild(a);
  a.setAttribute('href', 'https://gmail.com');
  a.dispatchEvent((function(e){
    e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
    return e;
  }(document.createEvent('MouseEvents'))))}(document.createElement('a')));
});

browser.driver.sleep(3000);

// Switch to new tab
browser.getAllWindowHandles().then(function (handles) {
  browser.switchTo().window(handles[1]); 

  if(a){
    var username = browser.driver.findElement(by.xpath('//*[@id="identifierId"]'));
    username.sendKeys('*********@gmail.com');
    browser.driver.findElement(by.id('identifierNext')).click();
  }
    var EC = protractor.ExpectedConditions;
    var firstEmail = element(by.xpath('//*[@id=":3d"]'));
    var passwordInput = element(by.xpath('//*[@id="password"]/div[1]/div/div[1]/input'));

  if(a){
    browser.wait(EC.visibilityOf(passwordInput), 5000);
    browser.driver.sleep(1000);
    passwordInput.sendKeys('*********');
    browser.driver.findElement(by.id('passwordNext')).click();
  }
      browser.wait(EC.visibilityOf(firstEmail), 5000);
      firstEmail.click().then(function () {
        browser.driver.sleep(2000);
        element.all(by.cssContainingText('div', 'Text Leading up to password:')).count().then(function (results) {
          element.all(by.cssContainingText('div', 'Text Leading up to password::')).get(results-1).getText().then(function (token) {
            //console.log(token);
            tokenKey = token.substring(token.indexOf('-')+1, token.length);
            //console.log(tokenKey);
          });
        });
      });
  browser.driver.close();
  browser.switchTo().window(handles[0]);
});
}