我的配置:
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类的任何替代方法。
答案 0 :(得分:0)
我为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();
}
}
,并且有效。详细了解一下您的代码。尝试调试它。
答案 1 :(得分:0)
用下面的代码段替换我的代码后,开始为我工作。
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();
似乎在同一步骤中执行所有操作会导致问题。