Почему класс Actions не совместим с браузером Firefox

Мои настройки:

selenium v 3.13.0 
geckodriver 0.21.0
Firefox version 61.0.1

У меня в приложении есть вид меню ниже, где мне нужно навести курсор на категорию, а затем выбрать продукт:

И я использую класс Actions для выполнения действия. Используя код ниже

@QAFTestStep(stepName = "navigateToCategoryProduct", description = "navigate to product name {0} under product category {1}")
    public void navigateToCategoryProduct(String product, String category)
            throws InterruptedException {
        new Actions(getDriver()).moveToElement(getCategory(category)).pause(500)
                .moveToElement(getProduct(category, product)).click().build().perform();

    }

    public QAFWebElement getCategory(String category) {
        return new QAFExtendedWebElement(String.format(ConfigurationManager.getBundle()
                .getString("header.navigation.category.link"), category));
    }

    public QAFWebElement getProduct(String category, String product) {
        return new QAFExtendedWebElement(String.format(ConfigurationManager.getBundle()
                .getString("header.navigation.product.link"), category, product));
    }

Так что с Chrome все гладко (используется v68.0). но в то время как тот же скрипт, который будет использоваться в Firefox, он завис Food категории и выбора продукта из Weight Loss категория. Я ломаю голову, чтобы найти альтернативу, как мне сделать этот браузер совместимым.

Я пытался с явным / неявным / жестко закодированным ожиданием, но безуспешно. Любая альтернатива для класса Action, которую я могу реализовать, чтобы навести курсор и выбрать подменю.

2 ответа

Решение

После замены моего кода на сегмент кода ниже, начал работать для меня.

Actions action = new Actions(getDriver()); 
action.moveToElement(getCategory(category)).build().perform();
waitForPresent(String.format(ConfigurationManager.getBundle().getString("header.navigation.product.link"), category, product));
getProduct(category, product).click();

Кажется, что создание всех действий за один шаг стало причиной проблемы.

Я добавил пример для Firefox:

public class Test {
    public static void main(String[] args) throws InterruptedException {
        WebDriver driver = new FirefoxDriver();
        driver.get("https://stackru.com/questions/51823909/why-actions-class-not-compatible-with-firefox-browser");
        Thread.sleep(5000);
        Actions actions = new Actions(driver);
        actions.moveToElement(driver.findElement(By.cssSelector("#question-header > div > a"))).pause(3).click().perform();
    }
}

и это работает. Посмотрите на ваш код более подробно. Попробуйте отладить это.

Другие вопросы по тегам