【问题标题】:getting cannot focus element in chrome and edge using java/selenium使用 java/selenium 获取无法在 chrome 和 edge 中聚焦元素
【发布时间】:2015-12-30 21:14:25
【问题描述】:

当我在 chrome 和 FF 中运行我的测试时,我得到一个无法聚焦元素错误,它工作正常。我尝试过发布的决议,但无济于事。我不知道该怎么办。希望那里有人可以提供帮助。提前致谢。

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

这是堆栈跟踪:

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

【问题讨论】:

  • 哦,是的,忘了提到设置活动标志的元素会发生错误。在我添加上述代码以将用户分配到组之前,这一切正常。
  • 请细化问题。你在哪里设置activeFlag。错误堆栈跟踪可以提供帮助。
  • activeFlag 包含在我正在阅读的文件中。当我读取文件并拆分行时,所有变量都已设置。我将添加堆栈跟踪。

标签: java google-chrome selenium selenium-webdriver microsoft-edge


【解决方案1】:

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

【讨论】:

  • Python、Selenium 3.8.1:from selenium.webdriver.common.action_chains import ActionChains; actions = ActionChains(driver)
  • 为我工作。非常感谢您挽救了我的一天。
  • @a_programmer 很高兴它有帮助
  • 我以前用难以触及的按钮让它工作。但现在我有一个没有的案例。这些操作绝对不做任何事情,并且不会导致错误。
  • @FrankH。您的评论没有提供有关该问题的任何背景。如果您认为您的问题是不同的情况并且无法在以前的问题中找到答案,请在 SO 上创建一个新问题
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    Actions 解决方案毕竟奏效了。我显然有一个额外的 driver.findElementBy 行应该被注释掉,因为它与我已经移动到另一个位置的东西重复。

    感谢您的帮助!!

    【讨论】:

      【解决方案4】:

      我在阅读“动作类”代码时发现了非常重要的代码。

      “动作类”之所以起作用,是因为

      actions.click()  
      

      ?!?

      .

      试着放一下

      element.click()
      

      之前

      element.sendKeys()
      

      在您现有的代码中。

      click() 方法使元素聚焦!!~~ THX 送给每一位前辈

      【讨论】:

        【解决方案5】:

        选择的答案只对我部分有效。通过添加

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            可能是您设置的 Xpath 未达到该元素级别。例如。如果一个文本框正在遍历Div\div\textarea,那么很可能,您只使用了Div\ 部分。我遇到了同样的问题,在将 xpath 写入 textarea 节点后得到了解决。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-01-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-10-28
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多