【问题标题】:How to click on a dropdown option using C# selenium如何使用 C# selenium 单击下拉选项
【发布时间】:2021-03-07 14:12:37
【问题描述】:

我需要单击其中一个下拉选项才能将页面条目从 10 扩展到 50。HTML 如下所示:

  <button id="page-size-dropdown-toggle" class="btn btn-white btn-sm dropdown-toggle ng-binding" data-toggle="dropdown" role="menuitem" aria-label="Change page size">
    10 
    <i class="fa fa-chevron-down" role="presentation"></i>
    <span class="sr-only ng-binding">Shown</span>
  </button>

  <ul id="page-size-dropdown-toggle-menu" class="dropdown-menu" role="menu" aria-labelledby="page-size-dropdown-toggle">
    <!-- ngRepeat: size in pageSizeCtrl.getPageSizes() --><li ng-repeat="size in pageSizeCtrl.getPageSizes()" role="presentation" class="ng-scope">
      <a href="" ng-click="pageSizeCtrl.changePageSize(size)" class="menuitem" role="menuitem" aria-label="Show 10">
        <span aria-hidden="true" class="ng-binding">10</span>
      </a>
    </li><!-- end ngRepeat: size in pageSizeCtrl.getPageSizes() --><li ng-repeat="size in pageSizeCtrl.getPageSizes()" role="presentation" class="ng-scope">
      <a href="" ng-click="pageSizeCtrl.changePageSize(size)" class="menuitem" role="menuitem" aria-label="Show 25">
        <span aria-hidden="true" class="ng-binding">25</span>
      </a>
    </li><!-- end ngRepeat: size in pageSizeCtrl.getPageSizes() --><li ng-repeat="size in pageSizeCtrl.getPageSizes()" role="presentation" class="ng-scope">
      <a href="" ng-click="pageSizeCtrl.changePageSize(size)" class="menuitem" role="menuitem" aria-label="Show 50">
        <span aria-hidden="true" class="ng-binding">50</span>
      </a>
    </li><!-- end ngRepeat: size in pageSizeCtrl.getPageSizes() -->
  </ul>
</div>

如您所见,有 3 个选项 10、25 和 50。这是我目前尝试过的:

单击下拉菜单并使用 LinText - 找不到此元素

var dropDown = driverIpass.FindElement(By.Id("page-size-dropdown-toggle"));
dropDown.Click();
driverIpass.FindElement(By.LinkText("Show 50")).Click();

使用 XPath(不可点击的元素)也尝试了不同的路径,但无济于事

IWebElement element = driverIpass.FindElement(By.XPath("//*[@class='dropdown-menu']/li[3]/a"));
element.Click();

以及使用@id 的XPath

还尝试在课程中四处挖掘,希望找到正确的链接 - 没有。有些东西我没有看到/意识到。 这是我使用 C# 和 selenium 的第二天,所以如果有人能让我走上正确的道路,我将不胜感激。 我无法提供实际网页,因为这是内部(公司)

【问题讨论】:

  • 你可以用谷歌搜索:answer
  • 我所做的与您建议的帖子中的完全一样。在我在这里发布之前,我已经用谷歌搜索了它。没用

标签: c# selenium drop-down-menu


【解决方案1】:

发布我的问题后找到答案。如果其他人可能有类似的问题:

//click to open drop down menu
var dropDown = driverIpass.FindElement(By.Id("page-size-dropdown-toggle"));
dropDown.Click();

//select the 3rd option within menu
IWebElement element = driverIpass.FindElement(By.XPath("//*[@id='page-size-dropdown-toggle-menu']/li[3]/a"));
element.Click();

【讨论】:

    【解决方案2】:

    尝试使用WebDriverWait() 并关注css selector

    WebDriverWait wait = new WebDriverWait(driverIpass, TimeSpan.FromSeconds(10));
    wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.CssSelector("#page-size-dropdown-toggle"))).Click();
    wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.CssSelector("#page-size-dropdown-toggle-menu li a[aria-label='Show 50']"))).Click();
    

    【讨论】:

    • 我是否需要另一个 NuGet 包才能使用“SeleniumExtras”?当我使用它时它被红线了
    • @Radas :是的,您需要 NuGet 包才能使用“SeleniumExtras”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多