【问题标题】:Chome 61, ChromeDriver 2.32 Click on element for mobile device emulators throws WebDriverException: unknown error: Element is not clickable at pointChome 61,ChromeDriver 2.32 点击移动设备模拟器的元素会抛出 WebDriverException:未知错误:元素此时不可点击
【发布时间】:2018-03-02 12:37:06
【问题描述】:

我的测试在 Chrome 60 和 ChromeDriver 2.31 中完美运行,但在 Chrome 更新到 61 版本后,我不得不将 ChromeDriver 更新到 2.32。现在我得到零星的 org.openqa.selenium.WebDriverException: unknown error: Element is not clickable at point (X, Y) - 在为移动设备模拟器运行的所有测试中,例如“iPhone 6 Plus”浏览器模式,

例如。

作为一种解决方法,我可能会在单击之前使用滚动到元素,但这只是一个快速修复,最好知道这个问题来自哪里。是当前最新的 Chrome 和驱动程序版本的问题吗?会不会很快修好?

问题在本地和远程 webdriver 上都重现。

堆栈跟踪:

org.openqa.selenium.WebDriverException:未知错误:元素不是 在点 (182, 3724) 可点击(会话信息:chrome=61.0.3163.91)
(驱动信息:chromedriver=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),平台=Windows NT 10.0.15063 x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:115 毫秒构建信息: 版本:'3.4.0',修订:'未知',时间:'未知'系统信息: 主机:'xxx',ip:'10.100.8.33',os.name:'Windows 10',os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_131' 驱动信息: org.openqa.selenium.chrome.ChromeDriver 功能 [{applicationCacheEnabled=false, 可旋转=false, mobileEmulationEnabled=true,networkConnectionEnabled=false, 铬={铬驱动程序版本=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a), userDataDir=C:\Users\xxx\AppData\Local\Temp\scoped_dir5912_31757}, 需要HeapSnapshot=true,pageLoadStrategy=正常, databaseEnabled=false,handlesAlerts=true,hasTouchScreen=true, 版本=61.0.3163.91,平台=XP,browserConnectionEnabled=false, nativeEvents=true,acceptSslCerts=true,locationContextEnabled=true, webStorageEnabled=true,browserName=chrome,takeScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, setWindowRect=true, unexpectedAlertBehaviour=dismiss}] 会话 ID: 2ead932fef8d0d923286ac41c8fffe50 命令持续时间或超时:257 毫秒

我猜它与https://bugs.chromium.org/p/chromedriver/issues/detail?id=1852有关

【问题讨论】:

    标签: google-chrome selenium selenium-chromedriver


    【解决方案1】:

    我不确定,但您的问题听起来很像我的问题。在我的浏览器更新后,我的测试似乎无法使用内置的 move_to_element() Selenium 方法滚动到元素。

    这是我用python编写的解决方法

       def scroll_to_element(element):
           self.driver.execute_script("window.scrollTo(0, %d);" % 
           element.location['y'])
    

    作为临时解决方案 - 尝试滚动到元素,然后尝试单击它。希望这对你现在有帮助。

    【讨论】:

    • 是的,在单击之前使用滚动的解决方法可以解决问题。谢谢。
    【解决方案2】:

    我有同样的问题(movetoelement 在使用 chromedriver2.32 和 Chrome61+ 的模式 movilemulation 中什么都不做),对我来说唯一的解决方案是回到 Chrome60。您可以在 https://www.slimjet.com/chrome/google-chrome-old-version.php

    当 chromedriver2.33 到货时,我将再次针对 Chrome61+ 进行测试

    【讨论】:

      【解决方案3】:

      Chrome 驱动程序开发人员知道该修复程序在移动设备模拟模式下无法正常工作。 ChromeDriver 2.33 中将对此进行修复。

      【讨论】:

        【解决方案4】:

        您需要将您的 chrome 版本降级到 59.0(32 位),因为新的 chrome 更新存在一些问题。 要么 您需要先滚动到元素,然后尝试单击

        【讨论】:

        • 如果 chrome 没有独立版本的安装程序,我该如何降级?
        • 该设备是否预装了 chrome?
        • 我使用的模拟器可以选择安装/卸载
        • 它不是设备 - 它是 Windows 上的 chrome,但它以响应式设计模式启动 iPhone 6 用户代理
        【解决方案5】:

        尝试使用 javascript 点击它对我有用。

         WebElement element = driver.findElement(By.id("gbqfd"));
        JavascriptExecutor executor = (JavascriptExecutor)driver;
        executor.executeScript("arguments[0].click();", element);
        

        【讨论】:

        • 同样 - 是的,我可以使用它,但不想:) 我很好奇它是否是最后一个 2.32 chromedriver 本身的问题。
        【解决方案6】:

        对此有替代解决方案:

        首先最大化窗口:

        driver.manage().window().maximize();
        

        其次,你可以使用Action类来moveToElement方法访问它

        WebElement element = driver.findElement(By("element"));
        Actions action = new Actions(driver);
        action.moveToElement(element).click().perform();
        

        【讨论】:

        • 是的,我可以使用它,但不想:) 我很好奇这是否是最后一个 2.32 chromedriver 本身的问题。
        • 可能是个问题。但我没有信心说是。我还没有证据。我们知道 selenium 没有供应商支持。所以我们可以依靠替代解决方案
        猜你喜欢
        • 2015-12-14
        • 2016-10-26
        • 2015-11-22
        • 2015-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-16
        • 2018-10-26
        相关资源
        最近更新 更多