4
respostas

Problemas na Localização do Selenium

Boa noite, estou com um pequeno problema com o código abaixo, ele roda a parte inicial sem problemas, que no caso seria, acessar o site, logar e aperta um botão específico que o encaminha a outro aba, porém nessa outra aba, aparece um aviso na tela, e quando automatizar para aperta o botão de fechar, ele simplesmente não funciona, detalhe já tentei com a classe robot e com javaExecutor e nenhum deles funcionou. Obs: O erro é a partir do Objeto webelement "aviso". Segue o HTML da página em questão

"<a href="javascript://" onclick="javascript:getElementById('postItAvisoDatas').style.visibility='hidden';" style="font-size:12px;color:red;">Fechar X</a>"
public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver","C:\\Users\\Miguel Bruno\\Documents\\chromedriver.exe");
        ChromeDriver driver = new ChromeDriver();
        driver.get("https://www.unip.br/presencial/");
        driver.manage().window().maximize();


        WebElement botaologin = driver.findElement(By.id("matricula1"));
         botaologin.sendKeys("xxxxxx");


         WebElement botaosenha = driver.findElement(By.xpath("//*[@id=\"senha1\"]"));
         botaosenha.sendKeys("xxxxx");

         WebElement entrar = driver.findElement(By.xpath("//*[@id=\"topo-site\"]/div/div/div[3]/form/div/div[1]/a"));
         entrar.click();

         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         Actions action = new Actions(driver);

         WebElement nome = driver.findElement(By.xpath("/html/body/div[2]/div/div[2]/h2/a"));
         action.moveToElement(nome).click(nome).perform();

         driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

         WebElement aviso = driver.findElement(By.xpath("//*[@id=\'postItAvisoDatas\']/a"));

         action.moveToElement(aviso).click(aviso).perform();
         Thread.sleep(3000);

         WebElement aviso2 = driver.findElement(By.xpath("//*[@id=\'postItHistorico\']/a[2]/img"));
         aviso2.click();
    }
}
4 respostas

Oi Miguel, tudo bem?

Acredito que a melhor alternativa seria colocar um id nesse link, seria possível realizar essa alteração? Se não, qual erro ocorre quando você realizada o acesso ao link através do By.xpath conforme você mencionou?

Boa noite, então eu não tenho como alterar, pois é de uma página já existente, também não sei se faz diferença, mas isso é de uma espécie de aviso que aparece assim que é transferido para essa página, no c aso aparece esse primeiro aviso, assim fecha tem outros 2 aviso, para então ir parar na página que realmente importa, porém, eu também, tentei usar o switchto(),frame... Mas não funcinou também.

Erro que da é o" NoSuchElementException: no such element: Unable to locate element", como se o elemento em questão não existisse.

<div id="postItAvisoDatas" style="z-index:1000;width:520px;height:580px;top:20px;left:30px;position:absolute;font-weight:normal;font-size:12px;font-family:verdana;text-align:left;background-color:lightyellow;padding:10px;border: solid 1px red;">
             <a href="javascript://" onclick="javascript:getElementById('postItAvisoDatas').style.visibility='hidden';" style="font-size:12px;color:red;">Fechar X</a><br>

    <br><span style="
    background: yellow;
    color: red;
    font-weight: bold;
</div>

Segue um esqueleto total do aviso, só uma observação esse "id" que aparece, é do aviso inteiro, não botão em específico, até tentei usar ele, mas também, não funcionou.

Você vai precisar selecionar a tag <a>, algumas alternativas para tentar:

driver.find_elements_by_xpath("//*[contains(text(), 'Fechar X')]")

driver.findElement(By.xpath("//div[@style='font-size:12px;color:red;']");

Otávio, boa tarde, olha tentei as duas opções que você me passou, porém continuam dando "no such element...", eu consegui uma forma não convencional, e longe do que eu realmente queria fazer, mas que por hora está funcionando, coloquei a linha de comando a abaixo, para simular com a classe robot o movimento do mouse e o click, até funciona, porém ainda não entendo esse erro que está dando, com o find By.

Robot robot = new Robot();

         robot.mouseMove(298,229);
         robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); 
         robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

De toda forma obrigado pela ajuda.