当前位置: 首页 > 知识库问答 >
问题:

从..标记中的下拉列表中选择元素,其中标记具有属性样式-display:none

何涵忍
2023-03-14

我想点击div[@id='main_filter'],然后从下拉菜单中选择一个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&nbsp;&nbsp;▼</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();

}

共有1个答案

欧阳鸿德
2023-03-14

您可以尝试在隐藏的ul元素上执行一些Javascript来更改它的style属性并显示它。我看到您已经在尝试删除style属性,但让我向您展示一种在此之前已经成功使用的方法:

IWebElement elementToShow = driver.FindElement(By.XPath("//ul[@class='dropSelect']"));
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].style.display = 'block';", elementToShow);

如果可以,那么您应该可以单击li元素。

 类似资料:
  • 问题内容: 我正在尝试从一个站点中删除下拉列表的所有类别组合。但是,选项的文本属性仅作为空白出现。尽管在检查时,我可以看到每个选项都包含文本。 输出: 如果我收到文字,则想遍历所有值以获取其他下拉菜单的不同组合。 问题答案: 该标签具有 风格 属性集为 显示:无; 因此您可以使用以下代码块来打印选项:

  • 问题内容: 我对正则表达式不太满意,但是对于PHP,我想从TinyMCE返回的字符串中的HTML标记中删除属性。 所以换成香草。 我将如何通过类似功能来实现这一目标? 问题答案: 务实的正则表达式将在所有合理的情况下解决此问题。不是第一个捕获组的匹配部分应删除,如下所示: 匹配一个后跟一个或多个“ not ”的字符,直到我们到达该部分为止。该更令其一起工作。将此匹配替换为,这是捕获的组。如果标记不

  • 问题内容: 假设您有一些用Selenium抓取并用BeautifulSoup解析的html源: 有没有一种方法可以从html代码或汤对象中删除所有具有以下内容的元素: 1.)html标记源中的属性(即) 要么 2.)在页面的CSS中具有该属性 问题答案: 我想我记得曾经处理过这样的网站-IP地址是通过多个HTML元素在内部表示的,其中一些是通过样式隐藏的,有些则具有使它们不可见的适当CSS类。从这

  • 我是硒的新手,我试图从下拉列表中选择一个选项。下拉列表的超文本标记语言如下: WebElement的是: 我已经尝试了几乎所有的方法,我可以在互联网上找到,但没有任何效果。我试图使用类,包装了,但它抛出了一个异常。 我试图丢失列表中的所有选项,但在这种情况下得到了异常应该有标签,但它有。我需要使用作为findelements的标识符。 请帮我解决这个问题。

  • JSoup在这里。我有以下我试图解析的超文本标记语言: 不幸的是,它的格式有点不正确(在

  • 我正在尝试使用基于元素ID的标记fire。HTML包含一张包含其他元素的卡片。最外层的父div包含我想用GTM跟踪的ID。当我运行GTM预览并单击元素时,触发器不会触发,当我单击以展开GTM中的单击详细信息时,它显示我单击了卡中的元素,而不是ID为“card-1”的元素。然而,当我将移动到卡内的img时,我能够让元素触发,并确保我点击了img。 我将触发器配置为在包含“card-1”的“Click