硒-测试未单击菜单项,但如果单击它,则测试完成

时间:2018-11-08 12:05:35

标签: selenium selenium-webdriver automated-tests

我今天开始使用Selenium WebDriver,并且正在编写登录/注销测试。

[Test]
    public void TestLoginLogout()
    {
        //Define browser and target URL
        IWebDriver browser = new ChromeDriver();
        browser.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
        browser.Navigate().GoToUrl("http://test-test.net");
        browser.Manage().Window.Maximize();

        //Define login credentials and webpage elements
        IWebElement fieldUsername = browser.FindElement(By.Id("mat-input-0"));
        IWebElement fieldPassword = browser.FindElement(By.Id("mat-input-1"));

        //Perform login using login credentials
        fieldUsername.SendKeys("tester");
        fieldPassword.SendKeys("tester123");
        IWebElement buttonLogin = browser.FindElement(By.Id("LoginButton"));
        buttonLogin.Click();

        //Perform logout action
        Actions action = new Actions(browser);
        IWebElement buttonLogout = browser.FindElement(By.XPath(".//div[@class='menu']/div/ul[@class='list']/li[last()]/a"));
        action.MoveToElement(buttonLogout).Click();
        //Locate confirm button in modal window
        browser.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
        IWebElement buttonConfirm = browser.FindElement(By.XPath(".//button[@class='swal-button swal-button--confirm']"));
        buttonConfirm.Click();
    }

测试登录后,应单击菜单中的“注销”按钮,然后在弹出模式对话框时单击“确认”按钮。问题是,测试没有单击“注销”按钮,但是如果在测试暂停时手动单击“注销”按钮,则测试完成。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

更新:问题在于单击菜单中的注销按钮。似乎测试运行速度太快,并且由于我们的应用程序在登录页面和首页之间有一个loader元素,因此该测试试图在loader元素仍然存在时单击注销按钮。这就是我所做的:

由于当前WebDrivers版本不推荐使用 ExpectedConditions ,因此我下载了以下NuGet软件包:DotNetSeleniumExtras.WaitHelpers

我声明了一个变量,该变量定义浏览器在抛出超时之前必须等待多长时间才能出现/可单击元素,并且该IJavaScript执行程序可以处理单击:

if(type.equals("Link"))
{
   holder.itemView.setClickable(true);
   holder.itemView.setOnClickListener(new View.OnClickListener()
   {
        @Override
        public void onClick(View view)
        {
            // do smoethink
        }
    });
}
else
{
   holder.itemView.setClickable(false);
}

最后,我更改了单击注销按钮和确认按钮(模式内)的方式:

IJavaScriptExecutor executor = (IJavaScriptExecutor)browser;
var wait = new WebDriverWait(browser, new TimeSpan(0, 0, 10));

现在测试成功执行了!