Selenium命令在Chrome Web驱动程序中不起作用(与Firefox一起使用)

时间:2018-12-07 21:51:11

标签: selenium spock geb chrome-web-driver webdrivermanager-java

我正在编写集成/ e2e测试,由于某种原因,任何硒驱动程序命令都无法与chromedriver一起使用,但是它们可以与firefox驱动程序和firefox无头驱动程序完美协作。

尝试的命令: moveByOffset doubleClick

尝试了两种Geb的交互方法

interact {
 doubleClick(centerClickable)
}

并直接访问网络驱动程序:

def driver = browser.getDriver()
Actions action = new Actions(driver)
WebElement element= driver.findElement(By.className("vis-drag-center"))
def doubleclick = action.doubleClick(element).build()
doubleclick.perform()

这两种方法都可以与firefox驱动程序一起使用。两者都无法与chrome驱动程序一起使用。

GebConfig.groovy文件的设置如下:

import io.github.bonigarcia.wdm.WebDriverManager
import org.openqa.selenium.Dimension
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
import org.openqa.selenium.firefox.FirefoxDriver
import org.openqa.selenium.firefox.FirefoxOptions

def chromeWebDriverVersion = '70.0.3538.67'

def driverFirefox = {
  WebDriverManager.firefoxdriver().setup()
  def driver = new FirefoxDriver()
  driver.manage().window().setSize(new Dimension(width, height))
  return driver
}

// ChromeDriver reference: https://sites.google.com/a/chromium.org/chromedriver/
// Download and configure ChromeDriver using https://github.com/bonigarcia/webdrivermanager
def driverChrome = {
  WebDriverManager.chromedriver().version(chromeWebDriverVersion).setup()
  def driver = new ChromeDriver()
  driver.manage().window().setSize(new Dimension(width, height))
  return driver
}

environments {
  firefox {
    driver = driverFirefox
  }
  chrome {
    driver = driverChrome
  }
//driver = driverFirefox
driver = driverChrome

我还尝试了Chrome版本2.43。

其他信息:

  • Mac Mojave
  • 硒v 3.7.0
  • geb v 2.2
  • spockcore v 1.1-groovy-2.4
  • groovy v 2.4.5
  • webdrivermanager v 3.0.0

如果有人感兴趣,则测试正在做什么:单击以选择vis.js元素。睡眠一秒钟(此处未包含代码),然后双击以打开/激活它。或拖动它。

除了硒作用外,chromedriver和geb都可以正常工作。只是现在,我需要doubleClick和moveByOffset(而不是移动到元素!)才出现问题,无法正常工作

我在这里发现了类似的问题,可能是相同的问题。也许不吧。但是没有提供解决方案:Selenium Web Driver DragAndDropToOffset in Chrome not working?

我们非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我只是有一点时间而感到好奇,因为我以前从未尝试过双击任何测试。因此,我使用this page作为测试用例,并使用Firefox和Chrome驱动程序运行了以下测试:

      ID_1  ID_2   ID_3
c_id
A     #1     #2     #3      
B     #1     #3            
C     #3      
D     #1     #2

它可以正常工作,双击的两种方式都可以触发预期的Javascript警报。

我什至没有使用最新的驱动程序版本2.45,而是在Windows 10上针对Chrome 71 64位使用2.41。此外,我还使用了bonigarcia的Webdriver Manager。我不知道您的设置有什么问题。我的Selenium版本是3.14.0,比您的Geb 2.2,Spock 1.1-groovy-2.4,Groovy 2.4.7更新一些。

也许这是MacOS的事情?我无法验证。也许您只是先运行我的测试,然后升级您的Selenium,并且如果这样做也无济于事,请尝试降级Chrome驱动程序,以便找出问题是否与驱动程序版本有关。


更新:我已升级到Chrome驱动程序2.45,该测试仍然有效。

答案 1 :(得分:0)

感谢您的回复。 您的测试也对我有用。这使我认为,硒的chromedriver和firefox驱动程序如何实现doubleclick和dragAndDropBy操作以及我们的应用程序对命令的响应方式之间的差异之间仅存在一些底层交互。

对于其他观察到类似行为的人,我使用一种变通办法,在其中我为chromedriver添加了其他操作。也许最好是找出您应该使用并触发的KEYDOWN事件等,或者找出为什么应用程序不响应这些事件的方法。但是我觉得已经花了很多时间:)

  if (browser.getDriver().toString().contains("chrome")) {
//      Work-around for chromedriver's double-click implementation
    content.click()
  }

  interact {
    doubleClick(content)
  }

对于dragAndDropBy:

  def drag(Navigator content, int xOff, int yOff) {
    //Work-around: move additional time for when chrome driver is used.
    int timesToMove = browser.getDriver().toString().contains("chrome") ? 2 : 1

    interact {
      clickAndHold(content)
      timesToMove.times {
        moveByOffset(xOff, yOff)
      }
      release()
    }
  }