3
respostas

Sempre quando tento executar um código mais de uma vez me da esse erro

INFORMAÇÕES: Detected dialect: W3C
Exception in thread "main" org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
  (Session info: chrome=88.0.4324.182)
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-5ALEA66', ip: '192.168.15.68', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_281'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 88.0.4324.182, chrome: {chromedriverVersion: 88.0.4324.96 (68dba2d8a0b14..., userDataDir: C:\Users\GLASSS~1\AppData\L...}, goog:chromeOptions: {debuggerAddress: localhost:51304}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:extension:largeBlob: true, webauthn:virtualAuthenticators: true}
Session ID: ca618b1491f706c2be2be75b06c9521b
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:285)
    at org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:106)
    at Agência.main(Agência.java:48)
3 respostas

Oi Arthur,

Posta aqui o seu código completo para a gente tentar entender qual pode ser a causa do problema.

public class Agência {

public static void main(String[] args) {
    //Local onde o driver está 

    System.setProperty("webdriver.chrome.driver", "C://chromedriver.exe");

    //Cria o Navegador Chrome para utilizar no selenium
    WebDriver driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.manage().deleteAllCookies();

    //Exporta a função de ações
    Actions actions = new Actions(driver);

    //primeira url de acesso que ele irá
    driver.get("http://localhost/");

    //ID elemento que voe vai usar - campo, botao....
    WebElement busca = driver.findElement(By.id("form:usuario"));
    WebElement senha = driver.findElement(By.id("form:senha"));
    WebElement clique = driver.findElement(By.id("form:loginButton"));

    //como enviar uma valor para algum campo no html 
    busca.sendKeys("login");
    senha.sendKeys("senha
insira seu código aqui

"); clique.click();

    //agencia

    WebElement menu = driver.findElement(By.xpath("//*[@id=\'navbar\']/ul/li[4]/a"));
    actions.moveToElement(menu);
    menu.click();
    WebElement age = driver.findElement(By.xpath("//*[@id=\'navbar\']/ul/li[4]/ul/li[1]/a"));
    age.click();
    driver.findElement(By.cssSelector("span.ui-button-text.ui-c")).click(); // clicando no incluir

    //Descrição de Agência

    WebElement des = driver.findElement(By.xpath("//*[@id=\"agencia_cadastro:j_idt126\"]"));
    des.sendKeys("Volker");

    //Codigo UA

    WebElement codigo = driver.findElement(By.xpath("//div[1]/div/div[2]/div[@class = 'col-md-4']//following-sibling::input"));
    codigo.sendKeys("01");

    //CNPJ

    WebElement cnpj = driver.findElement(By.xpath("//*[@id=\"agencia_cadastro:j_idt130\"]"));
    cnpj.sendKeys("00000000000000");

    //CEP

    WebElement cep = driver.findElement(By.xpath("//*[@id=\"agencia_cadastro:j_idt133\"]"));
    cep.sendKeys("86810320");

    //Endereço

    WebElement end = driver.findElement(By.xpath("//*[@id=\"agencia_cadastro:j_idt135\"]"));
    end.click();
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    end.getText();
    if (end.equals("")) {
    end.sendKeys("Rua");
    }

    //Cidade

    WebElement cid = driver.findElement(By.xpath("//*[@id=\"agencia_cadastro:j_idt139_input\"]"));
    cid.getText();
    if (cid.equals(""));
    cid.sendKeys("Apucarana");
    cid.submit();

    //Numero

    WebElement num = driver.findElement(By.xpath("//*[@id=\"agencia_cadastro:j_idt137\"]"));
    num.sendKeys("22");

    //Salvar

    WebElement sal = driver.findElement(By.xpath("//*[@id=\"agencia_cadastro:j_idt146\"]/span"));
    try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    sal.click();

    }
}

Oi Arthur,

Esse erro pode acontecer se tiver algum código JavaScript na página que manipula os elementos durante a execução dos testes.

Olhando por alto o código acredito que se trata de uma aplicação utilizando JSF, que por baixo dos panos utiliza bastante código JavaScript por conta das bibliotecas de componentes visuais.

No seu caso o erro está acontecendo ao chamar o método sendKeys em algum dos elementos da página, sendo que esse elemento foi "manipulado" via JavaScript antes do método sendKeys ser chamado, causando assim a exception. Pela stack trace isso está acontecendo na linha 48 da sua classe.

Altera o código para antes de chamar o sendKeys recuperar o elemento novamente. Exemplo:

WebElement end = driver.findElement(By.xpath("//*[@id=\"agencia_cadastro:j_idt135\"]"));

// trechos de códigos...

end.sendKeys("Rua");

Você altera para:

WebElement end = driver.findElement(By.xpath("//*[@id=\"agencia_cadastro:j_idt135\"]"));

// trechos de códigos...

end = driver.findElement(By.xpath("//*[@id=\"agencia_cadastro:j_idt135\"]"));
end.sendKeys("Rua");