代码之家  ›  专栏  ›  技术社区  ›  NarendraR TheSociety

为什么Actions类与Firefox浏览器不兼容

  •  0
  • NarendraR TheSociety  · 技术社区  · 6 年前

    selenium v 3.13.0 
    geckodriver 0.21.0
    Firefox version 61.0.1
    

    我的应用程序中有以下类型的菜单,我必须将鼠标悬停在类别上,然后才能选择产品:

    enter image description here

    @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));
        }
    

    所以一切都顺利与铬(使用v68.0)。但当同样的脚本在Firefox中使用时 Food 分类并从中选择产品 Weight Loss 类别。我绞尽脑汁想找到一个替代方案,如何使这个浏览器兼容。

    我试过显式/隐式/硬编码等待,但没有成功。我可以实现的Action类的任何替代方法来悬停并选择子菜单。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Andrei Suvorkov    6 年前

    我为Firefox添加了一个示例:

    public class Test {
        public static void main(String[] args) throws InterruptedException {
            WebDriver driver = new FirefoxDriver();
            driver.get("https://stackoverflow.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();
        }
    }
    

    而且有效。更详细地查看您的代码。试着调试它。

        2
  •  0
  •   NarendraR TheSociety    6 年前

    用下面的代码段替换我的代码后,开始为我工作。

    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();
    

    似乎在同一步骤中构建所有的操作都会引起问题。