Selenium Webdriver C#无法在" active"上找到元素。下拉班级列表

时间:2018-01-25 10:35:01

标签: selenium automation

如果是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元素,或者我错了......

2 个答案:

答案 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();
    }