Браузер Selenium c# клик - PullRequest
       2

Браузер Selenium c# клик

0 голосов
/ 22 января 2020

Пытается выбрать значение в раскрывающемся списке формы.

Текущий HTML выглядит как

<div class="listing-editor__input--half d--ib va--t">
   <div aria-haspopup="true" tabindex="-1" class="dropdown form__text--select d--b dropdown--expanded" aria-expanded="true">
      <div class="dropdown__selector dropdown__selector--select-tag dropdown__selector--select-tag--large">
         <p data-et-name="category" class="tc--lg">
            Select Subcategory (optional)
         </p>
      </div>
      <div>
         <ul class="dropdown__menu">
            <li class="dropdown__menu__item"><a class="dropdown__link">Belts</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Glasses</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Gloves &amp; Mittens</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Hair Accessories</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Hats</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Hosiery &amp; Socks</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Key &amp; Card Holders</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Laptop Cases</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Phone Cases</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Scarves &amp; Wraps</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Sunglasses</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Tablet Cases</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Umbrellas</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">Watches</a></li>
            <li class="dropdown__menu__item"><a class="dropdown__link">None</a></li>
         </ul>
      </div>
   </div>
   <p class="form__error-message" style="display: none;">
   </p>
</div>

И я пытаюсь выбрать по строке "Телефон"

Пробовал с

    // select the drop down list
    var education = driver.FindElementByCssSelector("#content > div > div > div:nth-child(2) > section:nth-child(4) > div > div.col-x24.col-l20 > div:nth-child(1) > div > div.dropdown__selector.dropdown__selector--select-tag.dropdown__selector--select-tag--large");

    //create select element object 
    var selectElement = new SelectElement(education);

    // select by text
    selectElement.SelectByText("Phone");

Выход

OpenQA.Selenium.Support.UI.UnexpectedTagNameException: «Элемент должен быть выбран, но был div»

Selector pick

Редактировать>

enter image description here

Ответы [ 2 ]

2 голосов
/ 22 января 2020

SelectElement может использоваться только с HTML выберите тег . Шаги для выбора раскрывающегося списка в HTML, который вы указали:

  1. щелкните раскрывающийся список, чтобы развернуть его
  2. найдите и щелкните элемент «option».

    using (IWebDriver driver = new ChromeDriver())
    {
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        IJavaScriptExecutor js = (IJavaScriptExecutor) driver;

        driver.Navigate().GoToUrl("https://poshmark.com/create-listing");

        driver.FindElement(By.Id("login_form_username_email")).SendKeys("username");
        driver.FindElement(By.Id("login_form_password")).SendKeys("password");
        driver.FindElement(By.TagName("button")).Click();

        wait.Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("input[data-vv-name='title']"))).SendKeys("Title controled by t3cho");

        driver.FindElement(By.CssSelector("[data-vv-name='originalPrice']")).SendKeys("22");

        var categoryCombobox = driver.FindElement(By.XPath("//span[@data-et-name='category']/ancestor::div[contains(@class,'isting-editor__input--half')][1]"));
        js.ExecuteScript("arguments[0].scrollIntoView(false)", categoryCombobox);
        categoryCombobox.Click();

        var category1 = driver.FindElement(By.LinkText("Accessories"));
        js.ExecuteScript("arguments[0].scrollIntoView(false)", category1);
        category1.Click();

        var category2 = driver.FindElement(By.LinkText("Glasses"));
        js.ExecuteScript("arguments[0].scrollIntoView(false)", category2);
        category2.Click();
    }

Скачать SeleniumExtras.WaitHelpers Пакет NuGet для ExpectedConditions.

0 голосов
/ 23 января 2020

Попробуйте это:

new SelectElement(driver.FindElement(By.Xpath("//ul[@class='dropdown__menu']"))).SelectByText("Phone Cases");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...