我今天开始使用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();
}
测试登录后,应单击菜单中的“注销”按钮,然后在弹出模式对话框时单击“确认”按钮。问题是,测试没有单击“注销”按钮,但是如果在测试暂停时手动单击“注销”按钮,则测试完成。
有什么建议吗?
答案 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));
现在测试成功执行了!