【问题标题】:Selenium how to click an <a> tag with in a <div> with the bootstrap drop down classSelenium 如何使用引导下拉类在 <div> 中单击 <a> 标记
【发布时间】:2021-01-21 15:12:17
【问题描述】:

我是 Selenium 的新手,在单击引导下拉菜单中的链接时遇到问题。这是标记:

<div class="dropdown float-lg-right">
    <button class="btn btn-sm dropdown-toggle" type="button" id="dropdownMenuButton" 
         data-toggle="dropdown">Select Action
    </button>
    <div class="dropdown-menu">
            <a class="dropdown-item" href="/controller/action?id=123">Add/Update Status</a>
            <button class="dropdown-item">Edit</button>
            <button class="dropdown-item">Send Update</button>
    </div>
</div>

这是当前尝试执行单击添加/更新状态链接的代码:

public static By addUpdateStatusDropDown = By.Id("dropdownMenuButton");
public static By addUpdateStatus = By.XPath("//*[contains(.,'Add/Update Status')]");

public void AddUpdateStatusClick()
{
    //This does expand the drop down
    _wait.Until(ExpectedConditions.ElementIsVisible(addUpdateStatusDropDown )).JSClick(driver);

    //This does not select the <a>Add/Update Status</a> tag
    _wait.Until(ExpectedConditions.ElementIsVisible(addUpdateStatus )).JSClick(driver);    
}

附加说明。此下拉列表存在于表格单元格中,因此会有多行与添加/更新状态文本有链接。我只对选择第一行中的第一个感兴趣。

有人可以帮我弄清楚如何模拟点击下拉列表中的“添加/更新状态”链接吗?

【问题讨论】:

  • 你可以试试下面的 xpath //div[@class='dropdown float-lg-right']//div[@class='dropdown-menu']/a[text()='Add/Update Status']

标签: selenium selenium-webdriver xpath webdriver webdriverwait


【解决方案1】:

因为它是一个Bootstrap 元素,所以您需要使用ExpectedConditions.ElementToBeClickable Method (By) 而不是ExpectedConditions.ElementToBeClickable Method (By),如下所示:

public static By addUpdateStatusDropDown = By.Id("dropdownMenuButton");
public static By addUpdateStatus = By.XPath("//div[@class='dropdown-menu']/a[@class='dropdown-item' and contains(.,'Add/Update Status')]");

public void AddUpdateStatusClick()
{
    //This does expand the drop down
    _wait.Until(ExpectedConditions.ElementToBeClickable(addUpdateStatusDropDown )).JSClick(driver);

    //This does not select the <a>Add/Update Status</a> tag
    _wait.Until(ExpectedConditions.ElementToBeClickable(addUpdateStatus )).JSClick(driver);    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2017-01-29
    • 1970-01-01
    • 2019-08-06
    • 2015-06-13
    • 2016-04-23
    相关资源
    最近更新 更多