【问题标题】:Custom IsDisplayed extension returns true when it should be false自定义 IsDisplayed 扩展在应该为 false 时返回 true
【发布时间】:2022-10-17 17:18:14
【问题描述】:

我正在自动化中进行一些自我开发,我编写了一个扩展方法来断言显示的元素也包括等待。

代码中没有显示错误,它构建并运行“正常”,并且成功地从我的 Extensions 类应用到我的页面对象,然后应用到步骤定义。

我想检查它是否正确通过/失败,所以我在登录测试中输入了错误的密码以确认它失败,但它通过就像它成功登录一样。我已经仔细检查了我正在使用的元素只有在登录后才会出现,所以这让我认为扩展方法是一个可能的问题。

这看起来对吗?

我的扩展(在扩展类中):

public static bool IsDisplayed(this IWebDriver driver, By by, int timeoutInSeconds = 10)
        {
            try
            {
                return driver.FindElement(by, timeoutInSeconds).Displayed;
            }
            catch (Exception)
            {
                return false;
            }
        }

应用于页面对象中的元素:

public void HomePageIsDisplayed()
        {
            _driver.IsDisplayed(TrelloHomeLogo);
        }

在步骤定义中的应用:

[Then(@"it logs in sucessfully")]
        public void ThenItLogsInSucessfully()
        {
            _homePage.HomePageIsDisplayed();
        }

TIA

【问题讨论】:

    标签: c# selenium extension-methods


    【解决方案1】:

    找到了这个问题的答案,所以我想我会为可能有同样问题的其他人自己回答......

    当我试图断言某些内容已显示时,我需要我的方法来返回某些内容,但它不能,因为它是一个 void 而不是一个布尔值(因为没有看到这一点而自己捂脸)。

    扩展很好,但是页面对象和步骤定义的变化如下......

    页面对象:

    public bool HomePageIsDisplayed()
            {
                return _driver.IsDisplayed(TrelloHomeLogo);
            }
    

    步骤定义:

    [Then(@"it logs in sucessfully")]
            public void ThenItLogsInSucessfully()
            {
                Assert.True(_homePage.HomePageIsDisplayed(), "Home page should be displayed");
            }
    

    步骤定义中的那个字符串是可选的,但是如果测试失败,我已经添加了它以获取更多信息,所以我确切地知道测试集合中失败的地方。

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多