Como fazer o Extent Reports gerar um relatório HTML quando o teste dá erro fora da tag @Test?

Criei um modelo de relatório para o meu projeto de testes que está até o momento atendendo minha demanda, porém, caso o teste falhe fora da tag ‘@Test’ o relatório não é gerado (sendo algum erro de conexão, ou erro no driver, etc). Acredito que isso acontece porque o teste não passa pelas tags @AfterMethod e @AfterTest quando erros desse tipo acontecem, e, portanto, não consigo executar os comandos extent.flush() e extent.close() e o arquivo html não é criado. Alguma sugestão do que posso fazer? Segue código em Java abaixo:

@BeforeTest public void startTest() {      className = this.getClass().getName();     String dateName = new SimpleDateFormat("dd-MM-yyyy hhmmss").format(new Date());     String userDir = System.getProperty("user.dir");     nomePasta = className.replace("MOBILEX_AUTOMACAO.TEST.", "") + " " + dateName;      new File(userDir + "\target\reports\" + nomePasta);      extent = new ExtentReports(userDir + "\target\reports\" + nomePasta + "\"             + className.replace("MOBILEX_AUTOMACAO.TEST.", "") + "REPORT.html", true);     extent.addSystemInfo("Nome APP", "MobileX");      extent.loadConfig(new File(userDir + "\extent-config.xml"));  }  @AfterMethod public void getResult(ITestResult result) throws Exception {      if (result.getStatus() == ITestResult.FAILURE) {         String screenshotPath = getScreenhot(result.getName());         logger.log(LogStatus.FAIL, "Test Case Failed is " + result.getThrowable());         logger.log(LogStatus.FAIL, "Test Case Failed is " + result.getName());          logger.log(LogStatus.FAIL, logger.addScreenCapture(screenshotPath));     } else if (result.getStatus() == ITestResult.SUCCESS) {         logger.log(LogStatus.PASS, "Test Case passed is " + result.getName());     }      extent.endTest(logger);     DriverFactory.killDriver(); }  @AfterTest public void endReport() throws IOException {      extent.flush();     extent.close();  } 

Meu projeto de testes é para Mobile, estou utilizando o TestNG, versão 6.10 para os meus testes em Java, com o Appium versão 7.0.

Como fazer uma verificação de duplicação de e-mail no método Put (update) quando algum outro usuário já tem o mesmo e-mail cadastrado?

No back-end da aplicação em node, quero fazer uma verificação de e-mail quando algum outro usuário já tem o mesmo e-mail cadastrado. Já funciona bem quando utilizo com o método POST, porém, ao fazer um update com PUT, a rotina atual identifica o próprio e-mail do usuário a ser alterado como duplicado (por ele já estar cadastrado no banco de dados), não queria isso e nem faz sentido, gostaria que no update, não fosse considerado o e-mail do próprio usuário que estou alterando, mas sim, verificar se tem algum outro usuário com e-mail equivalente.

Tentei o seguinte código:

chekEmailDuplicate = (req, res) => {    User.findOne({//Tenta localizar algum usuário             where: {//onde                    id: !req.body.id,                 email: req.body.email             }         }).then(user => {             if (user) {                 res.status(400).send("Fail -> Email is already in use!");                 return;             } } 

Como podemos observar no código acima, em:

id: !req.body.id  

Tentei algo como considerar o id diferente do próprio usuário em modificação, porém NÃO funciona, a aplicação aceita duplicidade de e-mail do mesmo jeito! No POST é uma maravilha, mas com o PUT não vai.

Alguém que manja em Node ou já sabe como resolver poderia me ajudar? Desde já agradeço!

‘Incorrect datetime value[…]’ quando uso o bindParam ou bindValue

Estou tentando inserir um cadastro no banco de dados da seguinte forma (PHP)

    $  sql = "INSERT INTO `tb_teste` (`estrutura`, `foto`, `data_cadastro`) VALUES (':estrutura', ':foto', ':data_cadastro')";      $  sql = $  this->db->prepare($  sql);      $  sql->bindParam(":estrutura", $  estrutura, PDO::PARAM_STR);     $  sql->bindParam(":foto", $  foto, PDO::PARAM_STR);     $  sql->bindParam(":data_cadastro", $  data_cadastro, PDO::PARAM_STR);      $  retorno = $  sql->execute(); 

Já tentei com bindValue, já tentei sem utilizar o último parametro PDO::PARAM_STR, já tentei converter para Timestamp, converti antes de mandar para o PHP (no jQuery), converti de várias formas diferentes no PHP e nada funcionou, continuo recebendo o erro:

Incorrect datetime value: ‘:data_cadastro’ for column ‘data_cadastro’ at row 1

A única coisa que eu fiz e inseriu no banco, foi isso:

$  sql = "INSERT INTO `tb_teste` (`estrutura`, `foto`, `data_cadastro`) VALUES (':estrutura', ':foto', '$  data_cadastro')";  $  sql = $  this->db->prepare($  sql);  $  sql->bindParam(":estrutura", $  estrutura, PDO::PARAM_STR); $  sql->bindParam(":foto", $  foto, PDO::PARAM_STR); 

colocando a variável da data direto na query não deu erro e inseriu a data no campo corretamente, porém os outros campos ficaram com o valor :estutura,:foto

OBS: valor exibido no var_dump($ data_cadastro):

C:\wamp64\www\TESTE\controllers\painel\testeController.php:57:string ‘1995-11-14 00:00:00’

Ou seja, quando tento utilizar o bindParam ou bindValue a inserção não funciona, mas se o valor é inserido na query, funciona corretamente.

Obrigado!

Como fazer com que uma mensagem de sessão apareça só quando tentar se cadastrar?

<?php session_start(); $  pdo = new PDO('mysql:host=localhost;dbname=login','root',''); $  email = $  _POST['email']; $  senha = $  _POST['senha']; $  insert = $  pdo->prepare('insert into tb_login (email,senha)VALUE (:email,:senha)'); $  insert->bindValue(':email',$  email); $  insert->bindValue(':senha',$  senha); $  insert->execute(); if($  insert->rowCount()==0){     $  _SESSION['msg']='Já existe uma conta com esse E-mail ';     header('location:cadastro.php'); } else if($  insert->rowCount()>0){     $  _SESSION['msg']='Cadastrado com sucesso';     header('location:cadastro.php');  } 

Textarea que chama uma Lista de Usuários quando a tecla F2 é pressionada

Bom dia

Pessoal foi me passada uma tarefa que esta sendo desafiadora preciso desenvolver um textarea que quando eu digito por exemplo F2 dentro dela uma lista contendo os logins do sistema deve ser apresentada.

Algo parecido foi visto no whatsapp quando você vai mandar uma mensagem para um grupo você coloca @ e lista seus contatos para marcar o mesmo na mensagem.

Alguém saberia informar como eu faço para que no textarea ocorra isso?

Eu pensei da seguinte forma não sei se seria a forma mais correta:

<html>   <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   </head>   <body> <div>     <label for="Comentario"> Comentário </label>     <div>       <textarea id="ComentarioText" onkeyup="listaUsuario()"             onfocus="this.rows=5" onblur="this.rows=1" rows="1">        </textarea>														    </div> </div> <script>        function listaUsuario() {       //Quando clicar sobre o F2 à lista de usuários cadastrados                     if (event.keyCode == 113) {         window.alert("O código: " + event.keyCode);      }    }  </script>   </body>

Até capturar a tecla consegui fazer agora minha dúvida aparece como eu faço para subir uma lista de usuário com base nessa ação não consegui achar algo que me desce alguma luz alguém poderia me dar um norte para onde seguir?

Pegar json de retorno de um POST com Axios quando ocorre erro 400 (Bad Request)

Estou fazendo uma requisição http em uma api usando o React Native com Axios, eu consigo obter o json e parsear ele quando o retorno da chamada é 200, porém, por exemplo, quando chamo um metodo, por exemplo, para cadastrar o usuario e passo um email de um usuario que ja esta cadastrado, ele me retorna um erro 400 (Bad Request) porém ele também traz um json com a mensagem de erro (“usuario ja cadastrado”). Eu preciso pegar essa mensagem de erro uma vez que ela é variavel na API e mostrar para o usuario, mas quando tento dar um console.log nela tenho o seguinte erro:

inserir a descrição da imagem aqui

o retorno do json é este:

inserir a descrição da imagem aqui

e o meu código de chamada esta assim:

inserir a descrição da imagem aqui

Como pegar este json mesmo com o retorno 400 no catch?

Obrigado.

Como pausar um script quando saio da pagina

Tenho uma função JavaScript que faz um loop, ela controla um elemento da página que troca de lugar com outro, meu objetivo é quando sair da página, essa função pare e só volte quando a página for aberta de novo

Função:

    function rodarLogos() {     setTimeout(function () {         $  div = $  ("#logo-1 .hex-warper");          $  baixo = $  div.find('.hexagon-parceiros-emBaixo');         $  central = $  div.find('.hexagon-parceiros-central');         $  cima = $  div.find('.hexagon-parceiros-emCima');          setTimeout(function () {             $  baixo.toggleClass('hexagon-parceiros-central hexagon-parceiros-emBaixo').parent().toggleClass('z-index-3  z-index-2 box-adicional box-adicional-50');             $  central.toggleClass('hexagon-parceiros-emCima hexagon-parceiros-central').parent().toggleClass('z-index-2  z-index-1 box-adicional-50 box-adicional');             $  cima.toggleClass('hexagon-parceiros-emBaixo hexagon-parceiros-emCima').parent().toggleClass('z-index-1  z-index-3');          }, 500);         rodarLogosPagamentos();     }, 5000); }    function rodarLogosPagamentos() {     setTimeout(function () {         $  div = $  ("#pagemento-1 .hex-warper");          $  baixo = $  div.find('.hexagon-parceiros-emBaixo');         $  central = $  div.find('.hexagon-parceiros-central');         $  direita = $  div.find('.hexagon-parceiros-direita');         $  cima = $  div.find('.hexagon-parceiros-emCima');           setTimeout(function () {             $  baixo.toggleClass('hexagon-parceiros-central hexagon-parceiros-emBaixo').parent().toggleClass('z-index-4  z-index-3 box-adicional box-adicional-50');             $  central.toggleClass('hexagon-parceiros-emCima hexagon-parceiros-central').parent().toggleClass('z-index-3  z-index-1 box-adicional-50 box-adicional');             $  cima.toggleClass('hexagon-parceiros-direita hexagon-parceiros-emCima').parent().toggleClass('z-index-1  z-index-2');             $  direita.toggleClass('hexagon-parceiros-direita hexagon-parceiros-emBaixo').parent().toggleClass('z-index-2  z-index-4');          }, 500);         rodarLogos();     }, 5000); }