Выберите элемент из выпадающего списка в теге <ul><li> .. </li><ul>, где тег <ul>, имеющий атрибут style -display: нет - PullRequest
0 голосов
/ 03 октября 2019

Я хочу нажать на 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&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>

мое решение: приватный 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();

}

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Одной из основных особенностей Selenium является то, что когда веб-драйвер пытается взаимодействовать с скрытым или скрытым элементом, он не может этого сделать. Это хорошая вещь, поскольку она позволяет нам обнаруживать такие аномалии в наших средах тестирования вместо того, чтобы показывать такое поведение нашим пользователям.

Хотя иногда это может немного сбивать с толку. Например, веб-драйвер, который пытается щелкнуть по элементу, покрытому прозрачным слоем, не сможет этого сделать, поскольку он покрыт, хотя для человеческого глаза он может выглядеть как интерактивный элемент.

0 голосов
/ 03 октября 2019

Вы можете попробовать выполнить Javascript на скрытом элементе ul, чтобы изменить его атрибут стиля и отобразить его. Я вижу, что вы уже пытаетесь удалить атрибут стиля, но позвольте мне показать вам подход, который я использовал до того, как он сработал:

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

Если это сработает, вы сможете нажать наli элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...