【问题标题】:Action called second time does not work on Firefox第二次调用的操作在 Firefox 上不起作用
【发布时间】:2022-12-09 17:41:27
【问题描述】:

测试使用包含动作的相同函数两次。第一次运行时它工作正常并且通过了测试用例。但是,在下一种情况下运行相同的功能不会正确触发操作。到目前为止我能看到的是该程序认为该操作已执行,因为它在下一步失败,如果前一个步骤不起作用则无法完成。

该代码在 Chrome 和 Firefox 上运行。 Chrome 运行正常,Firefox 不行。

@FindBy(css = "div.o-dropdown:nth-child(3)")
public WebElement myAccountBtn;

public void hoverProfileGoToManageProfiles() {
   WebElement topNavBar = driver.findElement(By.cssSelector(".c-navbar__container"));
   wait.until(ExpectedConditions.invisibilityOf(loadingSpinner));
   wait.until(ExpectedConditions.elementToBeClickable(topNavBar));
   performHoverManageProfiles();
}

public void performHoverManageProfiles() {
   actions.moveToElement(myAccountBtn).perform();
   WebElement manageProfilesBtn = driver.findElement(By.xpath("//*[@id=\"app\"]/nav[1]/div/div[2]/div[1]/div[2]/div/a[1]"));
   WebElement clickableManageProfilesBtn = wait.until(ExpectedConditions.elementToBeClickable(manageProfilesBtn));
   clickableManageProfilesBtn.click();
}

如您所见,在 performHoverManageProfiles() 中有 WebElement,它只能在操作(悬停)完成后才能找到。

我尝试将 WebElement 的创建移动到函数中,以便在每次运行时都能找到它。 此外,粘贴的代码已经经过一些更改,这就是它可能很混乱的原因,但到目前为止,结果是一样的——适用于 Chrome,不适用于 Firefox。

还尝试在每次运行后清除 myAccountBtn,同时在函数开始时创建它,但也没有成功。

我还认为这可能是性能问题,也许 Firefox 太快了,所以我添加了 Thread.sleep 和 fluent wait 直到网站加载完毕,但同样没有成功。

【问题讨论】:

    标签: java selenium selenium-webdriver automated-tests testng


    【解决方案1】:

    actions 对象是一次性容器,您可以在其中放置要执行的操作,例如“移动到那里”和“单击那个”。当您使用 .perform() 应用保存在其中的整个动作链内容时,将处理 actions 对象。
    为了再次使用 actions 对象,您需要使用如下代码再次创建该对象:

    Actions action = new Actions(driver);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-15
      • 2016-03-30
      • 2021-08-26
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多