org.openqa.selenium.WebDriverException:未知错误:无法使用ChromeDriver



我想加载 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是最左边的磁贴的路径。

也尝试了.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:UserssalmanAppDataLocalTempscoped_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)

我在火狐浏览器上尝试了相同的代码。请看一下,它正在工作。

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

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

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

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

此错误消息...

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

。意味着ChromeDriver无法专注于所需的WebElement

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

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

支持铬 v58-60

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

支持铬 v68-70

  • 您的Selenium客户端版本是3.4.0,有点旧。
  • 您的JDK版本1.8.0_171,它也有点旧。

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

溶液

  • JDK升级到最新级别JDK 8u181
  • 升级到当前级别版本 3.14.0
  • ChromeDriver升级到当前的ChromeDriver v2.42级别。
  • 将 Chrome版本保持在 Chrome v68-70级别之间。(根据ChromeDriver v2.42发行说明(
  • 通过IDE清理项目工作中心,并仅使用所需的依赖项重新生成项目。
  • 如果您的基本 Web 客户端版本太旧,请通过Revo 卸载程序将其卸载,并安装最新的 GA 和已发布版本的Web 客户端
  • 执行您的@Test

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

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

为了修复它,我们可以使用硒操作:

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

相关内容

  • 没有找到相关文章

最新更新