【发布时间】:2020-02-01 16:40:03
【问题描述】:
我想点击 div[@id='main_filter'] 然后从下拉列表中选择一个 li 元素。
但我面临的问题是,父标签有属性 style = display: none,所以 li 项目被隐藏。所以我无法从 li 标签中获取元素。
我正在创建一个用于 selectfromdropdown 的通用方法。
<div id="main_filter" class="drop-select-wrap">
<span data-title="Active Clinic Patients" data-value="101" class="optionValue ov-gradient">Active Clinic Patients ▼</span>
<ul class="dropSelect" id="parentFilter" style="display: none; width: 175px;">
<li id="filterTypes" data-value="102" onclick="tier1FilterChanged(this);" data-rel="My Active Patients">
<span data-title="My Active Patients">My Active Patients</span>
</li>
<li id="filterTypes" data-value="101" onclick="tier1FilterChanged(this);" data-rel="Active Clinic Patients">
span data-title="Active Clinic Patients">Active Clinic Patients</span>
</li>
<li id="filterTypes" data-value="126" onclick="tier1FilterChanged(this);" data-rel="Inactive Patients">
<span data-title="Inactive Patients">Inactive Patients</span>
</li>
</ul>
</div>
我的解决方案: private IWebElement parentFilter => driver.FindElement(By.XPath("//div[@id='main_filter'][1]/span"));
public void SelectFilter(string filterOption)
{
ElementHandler.Click(parentFilter);
IWebElement element = driver.FindElement(By.Id("parentFilter"));
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].removeAttribute('style')", element);
IWebElement filterName = element.FindElement(By.XPath("//li/span[contains(text(),'" + filterOption + "')]"));
//driver.FindElement(By.XPath("/ul[@id='parentFilter']/li/span[contains(text(),'"+ filterOption + "')]"));
ElementHandler.SelectFromDropdown(parentFilter, filterName);
}
public static void SelectFromDropdown(IWebElement element1,IWebElement element2)
{
Actions action = new Actions(driver);
action.ClickAndHold(element1).Build().Perform();
action.ClickAndHold(element1).MoveToElement(element2).Click().Build().Perform();
}
【问题讨论】:
-
使用代码时会发生什么?有具体的错误信息吗?
-
我的代码面临的问题是 - 它没有点击 li 元素。因为每次我需要单击下拉菜单,然后从 li 中选择。但由于我正在编写通用方法,所以这个解决方案对我不起作用。
-
您说 UL 列表项是隐藏的。那么为什么要选择LI项呢?如果您的目标是执行 onclick 事件,而不是尝试使用其数据值或使用 span 元素中的文本找到正确的 LI 元素并尝试从您的代码中触发事件。
标签: c# html selenium internet-explorer selenium-webdriver