繁体   English   中英

Selenium Webdriver开关/案例c#

[英]Selenium Webdriver Switch/Case c#

    [When(@"I click the Login button")]
    public void WhenIClickTheLoginButton()
    {
        _driver.Click(ElementType.Id, VariableList.LoginButtonId); //Clicks login button first

        string currentUrl = _driver.Url;

        if (currentUrl == BaseUrls.HomepageUk)
        {
            _driver.AssertIsTrueByUrl(_driver.Url, BaseUrls.HomepageUk);
        }
        if (currentUrl == BaseUrls.LogonPageUk) //Takes into account erroneous login
        {
            _driver.AssertIsTrueByUrl(_driver.Url, BaseUrls.LogonPageUk);
        }
        if (currentUrl == BaseUrls.PromoPageUk) //Takes into account the possibility of a promotion being displayed
        {
            _driver.AssertIsTrueByUrl(_driver.Url, BaseUrls.PromoPageUk);
            _driver.WaitForElementPresent(ElementType.Id, VariableList.PromoBanner);
            _driver.AssertElementDisplayed(ElementType.Id, VariableList.PromoBanner);
            _driver.AssertElementDisplayed(ElementType.XPath, VariableList.ContinueToHomepageButton);
            _driver.Click(ElementType.XPath, VariableList.ContinueToHomepageButton);
        }
    }

我正在努力将其更改为case / switch语句,而不是使用多个if语句。 我多次使用类似的登录方法。

我希望这有帮助

switch (currentUrl)
{
    case BaseUrls.HomepageUk
        _driver.AssertIsTrueByUrl(_driver.Url, BaseUrls.HomepageUk);
        break;
    case BaseUrls.LogonPageUk
        _driver.AssertIsTrueByUrl(_driver.Url, BaseUrls.LogonPageUk);
        break;
    case BaseUrls.PromoPageUk
        _driver.AssertIsTrueByUrl(_driver.Url, BaseUrls.PromoPageUk);
        _driver.WaitForElementPresent(ElementType.Id, VariableList.PromoBanner);
        _driver.AssertElementDisplayed(ElementType.Id, VariableList.PromoBanner);
        _driver.AssertElementDisplayed(ElementType.XPath, VariableList.ContinueToHomepageButton);
        _driver.Click(ElementType.XPath, VariableList.ContinueToHomepageButton);
        break;
}

阅读一些教程后,将if语句转换为switch应该非常简单。 但是...您的if语句中存在一些逻辑问题,我认为应该在进行此操作之前先进行清理和简化。

一个例子:

if (currentUrl == BaseUrls.HomepageUk)
{
    _driver.AssertIsTrueByUrl(_driver.Url, BaseUrls.HomepageUk);
}

上述断言什么时候会失败? 不会的 您实际上已经通过比较URL来完成断言,因此实际上不需要该断言,下一个或下一个断言。 您想要的是验证当前URL是否在3个URL的列表中。 您可以使用类似的switch来执行此switch

[When(@"I click the Login button")]
public void WhenIClickTheLoginButton()
{
    _driver.Click(ElementType.Id, VariableList.LoginButtonId); //Clicks login button first

    switch (_driver.Url)
    {
        case BaseUrls.HomepageUk:
            break;
        case BaseUrls.LogonPageUk:
            break;
        case BaseUrls.PromoPageUk:
            _driver.WaitForElementPresent(ElementType.Id, VariableList.PromoBanner);
            _driver.AssertElementDisplayed(ElementType.Id, VariableList.PromoBanner);
            _driver.AssertElementDisplayed(ElementType.XPath, VariableList.ContinueToHomepageButton);
            _driver.Click(ElementType.XPath, VariableList.ContinueToHomepageButton);
            break;
        default:
            // some assert that the URL is not one of the acceptable three
            break;
    }
}

您丢失的重要情况是实际上会导致故障的情况。 如果URL与三个不匹配怎么办? 您的if不能解决这个问题,那就是default情况下switch default情况包括比较是否与任何情况都不匹配。

因此,其工作方式是单击登录按钮,然后我们进入下一页。 我们获取该URL,并将其与两个URL进行比较。 如果它与任何一个都匹配,我们将退出开关,不执行任何操作。 如果它与BaseUrls.PromoPageUk相匹配,那么我们将执行所需的步骤。 注意,在这三种情况下,我们都没有断言,因为没有必要。 我们知道测试会通过。 现在我们来看default情况。 如果URL与以上3个都不匹配,则需要断言失败,因为我们登陆了意外页面。 我放置了一个注释占位符,因为您没有使用NUnit或我熟悉的任何测试框架,所以我不知道如何在框架中对声明的代码进行编码。


这是您没有要求的其他建议... :)

  1. 您确实应该使用NUnit或其他一些标准库。 我可以告诉您没有使用标准库,因为断言不应挂在_driver引用上。 从NuGet中拿起NUnit,安装并使用它。 它带有您将需要的所有断言比较。 您不需要编写和测试自己的断言代码,也不需要这样做,因为它是由很多人建立和使用的。

  2. 由于很多原因,我通常不喜欢Click()这样的通用方法,但如果要使用它,至少要传入By定位符,这样就不必传入定位符的类型了,定位器。 使用此方法和您编写的其他方法,会使您的生活更加轻松。 例如

     public static void Click(By locator) { _driver.FindElement(locator).Click(); } 

    您的VariableList类看起来像

     public static class VariableList { public static By LoginButtonId = By.Id("whateverTheIdIs"); } 

    你会这样称呼它

     _driver.Click(VariableList.LoginButtonId) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM