如果是C#中的selenium Webdriver我是初学者级别的。我可以找到元素,编写简单的脚本以输入一些值,撤回它,比较等等。我也可以通过SelectElement类从下拉列表中获取值,到目前为止我没有任何问题。
最近我们的一个系统被重构为React JS,我的大多数自动化测试都停止了工作。
现在我一直在努力进行简单的注销操作。我将在下面讨论我的问题,我将不胜感激任何提示或建议。
难的是我无法找到位于下拉列表中的注销链接,但是,它的代码如下所示。在单击作为下拉列表操作的链接之前,它看起来像这样:
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span>
UserName UserLast
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a href="/Account/Logout">Logout</a></li>
</ul>
<div id="user-login" class="hidden">UserName.UserLast</div>
<div id="user-email" class="hidden">UserName.UserLast@companyname.com</div>
</li>
当用户点击下面的代码更改时:
<li class="dropdown open">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="true">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span>
UserName UserLast
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a href="/Account/Logout">Logout</a></li>
</ul>
<div id="user-login" class="hidden">UserName.UserLast</div>
<div id="user-email" class="hidden">UserName.UserLast@companyname.com</div>
</li>
我的测试非常简单,找到Logout&#34;按钮/链接&#34;,单击它并执行注销操作。现在我开始定位动作链接,如下所示:
[FindsBy(How = How.XPath, Using = "/html/body/div[1]/div/div[2]/ul[2]/li[2]/a")]
private IWebElement userDropdown;
我的退出方法看起来像那样,
public void LogOut()
{
userDropdown.Click();
var userDropDownList = Browser.WebDriver.FindElement(By.XPath("/html/body/div[1]/div/div[2]/ul[2]/li[2]/ul"));
var logoutButton = userDropDownList.FindElement(By.LinkText("Logout"));
logoutButton.Click();
}
我在链接上执行单击操作,使用Logout查找列表,使用单击操作。仍然我的测试不起作用,我没有得到任何错误,但注销操作没有完成。我认为这里的问题不是selenium看不到的下拉列表。我没有尝试过SelectElement类,因为这个例子不是select元素,或者我错了......
答案 0 :(得分:0)
首先要确保您已滚动项目以查看
driver.FindElement(By.Xpath("descendant::a[text() = 'Logout']")).Click();
现在下拉列表应该打开,所以点击它
IWebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
那应该点击它。你可能想看一下它是否打开下拉菜单。在打开下拉菜单之后,您也可能需要在dom之后等待一秒钟才能更改。这将是这样的:
wait.Until(ExpectedConditions.ElementIsVisible(By.Xpath("descendant::li[@class = 'dropdown open']"));
在obj.Click()之后;你这样做:
{{1}}
答案 1 :(得分:0)
您需要在2个元素上执行click()
才能退出:
确定下拉列表:
[FindsBy(How = How.XPath, Using = "//li[@class='dropdown']/a[@class='dropdown-toggle']/span[@class='glyphicon glyphicon-user']")]
private IWebElement userDropdown;
logOut
方法:
public void logOut()
{
userDropdown.Click();
var logoutButton = Browser.WebDriver.FindElement(By.XPath("//li[@class='dropdown']//ul[@class='dropdown-menu']/li/a[@href='/Account/Logout']"));
logoutButton.Click();
}