获取无法使用java / selenium将元素集中在chrome和edge中

我在chrome中运行我的测试时遇到无法聚焦元素错误,并且FF中的边缘工作正常。 我已尝试过发布的决议但无济于事。 我不知道该怎么做。 希望有人可以提供帮助。 提前致谢。

driver.findElement(By.linkText("Add")).click(); List  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  roles = new Select(driver.findElement(By.name("community_role"))).getOptions(); roles.get(1).click(); } 

这是堆栈跟踪:

  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) 

这是另一个堆栈跟踪。 我在尝试单击提交按钮而不是活动标志时实际上收到错误。 我已经完成了我将提供的行动步骤。

 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) 

码:

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

sendkeys方法是根据堆栈跟踪的问题。

 at org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:121) 

请尝试使用Actions类首先关注元素然后发送所需的键。

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

行动决议确实起作用了。 我显然有一个额外的driver.findElementBy行应该被注释掉,因为它与我移动到另一个位置的东西重复。

谢谢你的帮助!!

为了将来参考,如果其他人遇到此问题,请确保您只找到一个元素! 在这方面,Chrome工具有时会欺骗。 我在firePath(firefox附加组件)中重新检查了我的选择器,结果发现我有两个匹配的节点,即使chrome工具向我展示了一个元素。

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

我在阅读“Action class”代码时发现了非常重要的代码。

“行动类”因工作而起作用

 actions.click() 

?!?

试试吧

 element.click() 

之前

 element.sendKeys() 

在您现有的代码中。

click()方法使元素集中!! ~~每个高级的THX

选择的答案只对我有用。 通过增加

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

在使用建议的答案之前,它完全奏效了!

这是正确答案的编辑版本,因为我无法复制粘贴该代码。 使用下面的代码,您可以复制粘贴它(如果元素被发现为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()