【问题标题】:org.openqa.selenium.WebDriverException: unknown error: cannot focus element using ChromeDriver Selenium and Javaorg.openqa.selenium.WebDriverException:未知错误:无法使用 ChromeDriver Selenium 和 Java 聚焦元素
【发布时间】:2018-09-27 14:11:28
【问题描述】:

我想加载2048 game,然后点击向下键。 我试过下面的代码:

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)

【问题讨论】:

  • 您在日志中看到了什么?
  • @njosep 更新了我的问题

标签: java selenium google-chrome webdriver selenium-chromedriver


【解决方案1】:

我在 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();
}}

【讨论】:

  • 如果您在chrome上试用会收到什么?
【解决方案2】:

根据错误消息,您尝试应用 sendKeys 的元素未获得焦点 - 因此 ChromeDriver 无法与之交互。

如果您只想按下箭头,下面的代码应该可以工作(只是更改了示例中的 xPath):

driver=new ChromeDriver();
driver.get("http://2048game.com");
String path="//*";
driver.findElement(By.xpath(path)).sendKeys(Keys.ARROW_DOWN);

【讨论】:

    【解决方案3】:

    此错误消息...

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

    ...暗示 ChromeDriver 无法聚焦 所需的 WebElement

    您的主要问题是您使用的二进制文件版本之间的不兼容性,如下所示:

    • 您正在使用 chromedriver=2.30
    • chromedriver=2.30 的发行说明明确提及以下内容:

    支持 Chrome v58-60

    • 您正在使用 chrome=69.0
    • chromedriver=2.42 的发行说明明确提及以下内容:

    支持 Chrome v68-70

    • 您的 Selenium Client 版本是 3.4.0,有点旧。
    • 您的 JDK 版本1.8.0_171,也有点旧。

    所以 JDK v8u171Selenium Client v3.4.0ChromeDriver v2.36 之间存在明显的不匹配Chrome 浏览器 v69.0

    解决方案

    • JDK升级到最新级别JDK 8u181
    • Selenium升级到当前级别Version 3.14.0
    • ChromeDriver 升级到当前的ChromeDriver v2.42 级别。
    • Chrome 版本保持在 Chrome v68-70 级别之间。 (as per ChromeDriver v2.42 release notes)
    • 清理你的项目工作区通过你的IDE重建你的项目只需要依赖。
    • 如果您的基础 Web Client 版本太旧,请通过 Revo Uninstaller 卸载它并安装最新的 GA 和发布版本的 Web Client
    • 执行您的@Test

    【讨论】:

      【解决方案4】:

      使用 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();
      

      【讨论】:

        【解决方案5】:

        您需要在向元素发送键之前将焦点设置在元素上。

        为了修复它,我们可以使用 Selenium Actions:

        Actions assigner = new Actions(webdriver);
        assigner.moveToElement(webelement);
        assigner.click();
        assigner.sendKeys("<your value>");
        assigner.build().perform();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-10-27
          • 2019-02-01
          • 2014-02-03
          • 1970-01-01
          • 1970-01-01
          • 2020-08-19
          • 1970-01-01
          相关资源
          最近更新 更多