Команды Selenium не работают в веб-драйвере Chrome (работа с Firefox) - PullRequest
0 голосов
/ 08 декабря 2018

Я пишу тесты интеграции / e2e, и по какой-то причине любые команды драйвера селена не работают с chromedriver, но они работают безупречно с драйвером firefox и безголовым драйвером firefox.

Командыпробовал: moveByOffset и doubleClick

Пробовал оба метода Geract Interact

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

Я также пробовал версию 2.43 Chrome.

Дополнительная информация:

  • Mac Mojave
  • Selenium v ​​3.7.0
  • geb v 2.2
  • spockcore v 1.1-groovy-2.4
  • groovy v2.4.5
  • webdrivermanager v 3.0.0

Если кому-то интересно, что делает тест: выберите элемент vis.js, нажав на него.Спать на секунду (код здесь не указан), затем открыть / активировать его, дважды щелкнув по нему.Или перетаскивая его.

Кроме действий с селеном, все отлично работает с chromedriver и geb.Только теперь, когда мне нужен doubleClick и moveByOffset (а не перемещение к элементу!), У меня возникают проблемы с тем, чтобы все работало правильно

Я нашел похожий вопрос здесь, может быть та же проблема.Возможно, нет.Но решения не предусмотрено: Веб-драйвер Selenium DragAndDropToOffset в Chrome не работает?

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Спасибо за ваш ответ kriegaex.Ваши тесты также работают для меня.Это заставляет меня думать, что существует лишь некоторое взаимодействие более низкого уровня между различиями в том, как chromedriver и драйвер firefox в selenium реализовали действия 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()
    }
  }
0 голосов
/ 24 декабря 2018

У меня просто было немного времени, и мне было любопытно, потому что я никогда не пытался выполнить двойной щелчок в любом из моих тестов раньше.Поэтому я использовал эту страницу в качестве тестового примера и запустил следующий тест с драйверами Firefox и Chrome:

package de.scrum_master.stackoverflow

import geb.spock.GebReportingSpec
import org.openqa.selenium.By
import org.openqa.selenium.interactions.Actions

class DoubleClickTest extends GebReportingSpec {
  def "double-click via Geb interaction"() {
    given:
    go "https://artoftesting.com/sampleSiteForSelenium.html"
    def doubleClickButton = $("#dblClkBtn")

    expect:
    withAlert {
      interact {
        doubleClick(doubleClickButton)
      }
    } == "Hi! Art Of Testing, Here!"
  }

  def "double-click via Selenium action"() {
    given:
    go "https://artoftesting.com/sampleSiteForSelenium.html"
    def doubleClickButton = driver.findElement(By.id("dblClkBtn"))
    def doubleClick = new Actions(driver).doubleClick(doubleClickButton).build()

    expect:
    withAlert {
      doubleClick.perform()
    } == "Hi! Art Of Testing, Here!"
  }
}

Он работает без сбоев, оба способа двойного щелчка вызывают ожидаемый Javascriptalert.

Я даже не пользуюсь последней версией драйвера 2.45, а 2.41 против 64-разрядной версии Chrome 71 в Windows 10. Кроме того, я также использую Webdriver Manager от bonigarcia.Я понятия не имею, что не так с вашей настройкой.Моя версия Selenium 3.14.0, немного новее вашей, Geb 2.2, Spock 1.1-groovy-2.4, Groovy 2.4.7.

Может быть, это MacOS?Я не могу это проверить.Может быть, вы сначала запустите мой тест, а затем обновите свой Selenium, и если это также не поможет попытаться понизить версию драйвера Chrome, чтобы выяснить, не связана ли проблема с версией драйвера.


Обновление: Я обновил Chrome до версии 2.45, тест все еще работает.

...