web-dev-qa-db-fra.com

obtenir l'élément de focalisation impossible dans Chrome et Edge avec Java/sélénium

Je reçois une erreur ne pouvant pas se focaliser sur les éléments lors de l'exécution de mon test en chrome et Edge en FF, cela fonctionne bien. J'ai essayé des résolutions postées mais en vain. Je ne sais pas quoi faire à ce sujet. En espérant que quelqu'un puisse aider. Merci d'avance.

driver.findElement(By.linkText("Add")).click();
List <WebElement> groups = new Select(driver.findElement(By.xpath("/html/body/div[1]/section/div/article/form/fieldset/div[3]/div[2]/div/div/div[1]/select"))).getOptions();
groups.get(3).click();
JavascriptExecutor js = (JavascriptExecutor)driver;
WebElement groupRole = driver.findElement(By.xpath("/html/body/div[1]/section/div/article/form/fieldset/div[3]/div[2]/div/div/div[2]/label[2]"));
js.executeScript("arguments[0].click();", groupRole);
driver.findElement(By.xpath("/html/body/div[1]/section/div/article/form/fieldset/div[3]/div[2]/div/div/div[2]/label[2]")).sendKeys(" ");
// Check to see if the user should be made active and set active checkbox to on if value in file is "active"
if (activeFlag.equals("active"))
{
    driver.findElement(By.xpath("/html/body/div[1]/section/div/article/form/fieldset/div[3]/div[1]/div[1]/div/div/input")).sendKeys(" ");
} 
// If the user role is to be admin then set the Site role to Administrator
if (userLevel.equals("admin"))
{
    List <WebElement> roles = new Select(driver.findElement(By.name("community_role"))).getOptions();
    roles.get(1).click();
}

Voici la trace de la pile:

 Exception in thread "main" org.openqa.Selenium.WebDriverException: unknown error: cannot focus element
      (Session info: chrome=47.0.2526.106)
      (Driver info: chromedriver=2.20.353145 (343b531d31eeb933ec778dbcf7081628a1396067),platform=Windows NT 10.0 x86_64) (WARNING: The server did not provide any stacktrace information)
    Command duration or timeout: 81 milliseconds
    Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12'
    System info: Host: 'Janet-PC', ip: '192.168.56.1', os.name: 'Windows 8.1', os.Arch: 'x86', os.version: '6.3', Java.version: '1.7.0_80-ea'
    Session ID: 0a9dbd54a81a42a4178b25b95bb14f63
    Driver info: org.openqa.Selenium.chrome.ChromeDriver
    Capabilities [{platform=WIN8_1, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=C:\Users\Janet\AppData\Local\Temp\scoped_dir7508_15608}, rotatable=false, locationContextEnabled=true, mobileEmulationEnabled=false, version=47.0.2526.106, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, webStorageEnabled=true, nativeEvents=true, hasTouchScreen=false, applicationCacheEnabled=false, takesScreenshot=true}]
        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.ErrorHandler.createThrowable(ErrorHandler.Java:206)
        at org.openqa.Selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.Java:158)
        at org.openqa.Selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.Java:647)
        at org.openqa.Selenium.remote.RemoteWebElement.execute(RemoteWebElement.Java:326)
        at org.openqa.Selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.Java:121)
        at Viddler_create_user.createUser.test(createUser.Java:244)
        at Viddler_create_user.createUser.setUpBeforeClass(createUser.Java:126)
        at Viddler_create_user.createUser.main(createUser.Java:64)

Voici une autre trace de pile. Je reçois réellement l'erreur lorsque j'essaie de cliquer sur le bouton d'envoi et non sur l'indicateur actif J'avais déjà fait les étapes des actions que je vais également fournir.

Exception in thread "main" org.openqa.Selenium.WebDriverException: unknown error: cannot focus element
  (Session info: chrome=47.0.2526.106)
  (Driver info: chromedriver=2.20.353145 (343b531d31eeb933ec778dbcf7081628a1396067),platform=Windows NT 10.0 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 52 milliseconds
Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12'
System info: Host: 'Janet-PC', ip: '192.168.56.1', os.name: 'Windows 8.1', os.Arch: 'x86', os.version: '6.3', Java.version: '1.7.0_80-ea'
Session ID: f332b496aa54d581c764f7328e770e65
Driver info: org.openqa.Selenium.chrome.ChromeDriver
Capabilities [{platform=WIN8_1, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=C:\Users\Janet\AppData\Local\Temp\scoped_dir2072_18936}, rotatable=false, locationContextEnabled=true, mobileEmulationEnabled=false, version=47.0.2526.106, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, webStorageEnabled=true, nativeEvents=true, hasTouchScreen=false, applicationCacheEnabled=false, takesScreenshot=true}]
    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.ErrorHandler.createThrowable(ErrorHandler.Java:206)
    at org.openqa.Selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.Java:158)
    at org.openqa.Selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.Java:647)
    at org.openqa.Selenium.remote.RemoteWebElement.execute(RemoteWebElement.Java:326)
    at org.openqa.Selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.Java:121)
    at Viddler_create_user.createUser.test(createUser.Java:244)
    at Viddler_create_user.createUser.setUpBeforeClass(createUser.Java:126)
    at Viddler_create_user.createUser.main(createUser.Java:64)

Code:

        Actions actions = new Actions(driver);
        actions.moveToElement(driver.findElement(By.xpath("/html/body/div[1]/section/div/article/form/input[2]")));
        actions.click();
//      actions.sendKeys(" ");
        actions.build().perform();
12
Janet

méthode sendkeys est le problème selon la trace de la pile.

at org.openqa.Selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.Java:121)

Veuillez essayer Actions class de vous concentrer d'abord sur l'élément, puis d'envoyer les clés requises.

Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.click();
actions.sendKeys("SOME DATA");
actions.build().perform();
43
parishodak

La résolution Actions a finalement fonctionné. J'ai apparemment eu une ligne driver.findElementBy supplémentaire qui aurait dû être commentée car il s'agissait d'un doublon de quelque chose que j'avais déplacé vers un autre emplacement.

Merci de votre aide!!

2
Janet

Pour référence future, si d'autres personnes rencontrent ce problème, assurez-vous de ne trouver qu'un élément! Les outils Chrome peuvent parfois être trompeurs. J'ai revérifié mon sélecteur dans firePath (add-on firefox) et il est apparu que j'avais deux nœuds correspondants, même si les outils chromés ne m'avaient montré qu'un élément. 

https://addons.mozilla.org/en-US/firefox/addon/firepath/

2
Valkyrie

J'ai trouvé du code très important en lisant le code "Action class".

"Classe d'action" Fonctionne à cause de 

actions.click()  

?!

.

Essayez juste de mettre

element.click()

avant 

element.sendKeys()

dans votre code existant.

la méthode click () rend l'élément concentré !! ~~ THX pour chaque senior

0
소경현

Ceci est une version modifiée de la réponse correcte, car je ne pouvais pas simplement copier coller ce code. Avec le code ci-dessous, vous pouvez copier le coller (si l'élément est trouvé en tant qu'id)

elem = driver.find_element_by_id("WHATEVER THE ELEMENT ID IS HERE")
actions = ActionChains(driver)
actions.move_to_element(elem)
actions.click()
actions.send_keys("PUT YOUR TEXT IN HERE")
actions.perform()
0
Romano

La réponse choisie ne fonctionna que partiellement pour moi. En ajoutant 

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(element));
element.clear();

avant d'utiliser la réponse suggérée, cela a fonctionné complètement!

0
Alex