org.openqa.selenium.WebDriverException: неизвестная ошибка: невозможно сфокусировать элемент, используя ChromeDriver Selenium и Java - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу загрузить игру 2048 и нажать Вниз .Я пробовал приведенный ниже код:

driver=new ChromeDriver();
driver.get("http://2048game.com");
String path="/html/body/div[2]/div[3]/div[3]/div[1]/div";
driver.findElement(By.xpath(path)).sendKeys(Keys.ARROW_DOWN);

path - это xpath самой левой верхней плитки.

Также пробовал .sendKeys(Keys.DOWN);, но это также не помогло.

Он успешно загружает страницу, но не нажимает DownKey?

Мой код в консоли жалуется на:

Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: cannot focus element
  (Session info: chrome=69.0.3497.100)
  (Driver info: chromedriver=2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41),platform=Windows NT 10.0.17134 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 38 milliseconds
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: 'LAPTOP-BD6AOVKQ', ip: '192.168.1.208', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_171'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41), userDataDir=C:\Users\salman\AppData\Local\Temp\scoped_dir23108_15057}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=69.0.3497.100, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=}]
Session ID: 6be1718d9dbeddfa7508d895eb40a10c
    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:215)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:671)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:272)
    at org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:96)
    at services.Hook.<init>(Hook.java:27)
    at mains.Online2048.main(Online2048.java:9)

Ответы [ 5 ]

0 голосов
/ 12 января 2019

Вам необходимо установить фокус на элемент перед отправкой ключей к нему.

Чтобы исправить это, мы можем использовать Selenium Actions:

Actions assigner = new Actions(webdriver);
assigner.moveToElement(webelement);
assigner.click();
assigner.sendKeys("<your value>");
assigner.build().perform();
0 голосов
/ 28 сентября 2018

Найдено решение с использованием chromeDriver.

        driver.get("http://2048game.com");
        WebElement e1=driver.findElement(By.xpath("/html[1]/body[1]"));
        e1.sendKeys(Keys.ARROW_DOWN);
        System.out.println("Done");
        Thread.sleep(15000);
        driver.quit();
0 голосов
/ 27 сентября 2018

На основании сообщения об ошибке элемент, к которому вы пытаетесь применить sendKeys, не сфокусирован - таким образом, ChromeDriver не может взаимодействовать с ним.

В случае, если вы просто хотите нажать стрелку вниз, следующий код должен работать (простоизменил xPath из вашего примера):

driver=new ChromeDriver();
driver.get("http://2048game.com");
String path="//*";
driver.findElement(By.xpath(path)).sendKeys(Keys.ARROW_DOWN);
0 голосов
/ 27 сентября 2018

Это сообщение об ошибке ...

org.openqa.selenium.WebDriverException: unknown error: cannot focus element

... означает, что ChromeDriver не смог сфокусировать на желаемом WebElement .

Ваша главная проблема - несовместимость между версиями двоичных файлов, которые вы используете следующим образом:

  • Вы используете chromedriver = 2,30
  • В заметках о выпуске chromedriver = 2,30 четко упоминается следующее:

Поддержка Chrome v58-60

Поддержка Chrome v68-70

  • Ваш Клиент Selenium версия 3.4.0 , которая немного старше.
  • Ваша версия JDK равна 1.8.0_171 , которая также немного старше.

Таким образом, существует явная ставка на несоответствиеween JDK v8u171 , Selenium Client v3.4.0 , ChromeDriver v2.36 и Chrome Browser v69.0

Решение

  • Обновление JDK до последних уровней JDK 8u181 .
  • Обновление Селен до текущих уровней Версия 3.14.0 .
  • Обновление ChromeDriver до текущей ChromeDriver v2.42 уровень.
  • Keep Chrome версия между Chrome v68-70 уровней.( согласно примечаниям к выпуску ChromeDriver v2.42 )
  • Очистить ваше Рабочее пространство проекта через IDE и Перестройте ваш проект только с необходимыми зависимостями.
  • Если ваша базовая Веб-клиент версия устарела, удалите ее через Revo Uninstaller и установите последнюю версию GA и выпущенную версию веб-клиента .
  • Выполните @Test.
0 голосов
/ 27 сентября 2018

Я пробовал тот же код в браузере Firefox.Пожалуйста, посмотрите, и это работает.

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
public class geckodriver {
    public static void main(String[] args) throws InterruptedException {




        System.setProperty("webdriver.gecko.driver", "C:\\Users\\XXXX\\Downloads\\geckodriver-v0.20.1-win64\\geckodriver.exe");
        Thread.sleep(5000);
//      DesiredCapabilities capabilities = DesiredCapabilities.firefox();
//      capabilities.setCapability("marionette", true);
//      
//      WebDriver driver = new FirefoxDriver(capabilities);

        DesiredCapabilities capabilities = new DesiredCapabilities();

        capabilities = DesiredCapabilities.firefox();
        capabilities.setBrowserName("firefox");
        capabilities.setVersion("your firefox version");
        capabilities.setPlatform(Platform.WINDOWS);
        capabilities.setCapability("marionette", false);

        WebDriver driver = new FirefoxDriver(capabilities);

    //  driver.get("http://www.google.com");

        driver.get("http://2048game.com");
        String path="/html/body/div[2]/div[3]/div[3]/div[1]/div";
        driver.findElement(By.xpath(path)).sendKeys(Keys.ARROW_DOWN);
        System.out.println("Done");
        Thread.sleep(5000);
        driver.quit();
}}
...