Команды Selenium не работают в веб-драйвере Chrome (работает с Firefox)
Я пишу тесты интеграции /e2e, и по какой-то причине любые команды драйвера селена не работают с chromedriver, но они работают безупречно с драйвером firefox и безголовым драйвером firefox.
Пробовал команды: moveByOffset и doubleClick
Пробовал оба метода 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 хрома.
Дополнительная информация:
- Мак Мохаве
- Selenium v 3.7.0
- geb v 2.2
- споккор 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 в Chrome не работает?
Любая помощь очень ценится.
2 ответа
Спасибо за ваш ответ 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)
}
И для перетаскивания AndDropBy:
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()
}
}
У меня просто было немного времени, и мне было любопытно, потому что я никогда не пытался выполнить двойной щелчок в любом из моих тестов раньше. Поэтому я использовал эту страницу в качестве тестового примера и запустил следующий тест с драйверами Firefox и Chrome:
package de.scrum_master.stackru
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!"
}
}
Это работает безупречно, оба способа двойного щелчка вызывают ожидаемое предупреждение Javascript.
Я даже не использую последнюю версию драйвера 2.45, а 2.41 против 64-разрядной версии Chrome 71 в Windows 10. Кроме того, я также использую диспетчер webdriver от bonigarcia. Я понятия не имею, что не так с вашей настройкой. Моя версия Selenium 3.14.0, немного новее вашей, Geb 2.2, Spock 1.1-groovy-2.4, Groovy 2.4.7.
Может быть, это вещь MacOS? Я не могу это проверить. Возможно, вы сначала запустите мой тест, а затем обновите свой Selenium, и если это также не поможет попытаться понизить версию драйвера Chrome, чтобы выяснить, не связана ли проблема с версией драйвера.
Обновление: Я обновил до Chrome Driver 2.45, тест все еще работает.