Исключение «Элемент должен был быть выбран, но был div» C # selenium - PullRequest
0 голосов
/ 25 июня 2018

Я получаю исключение с куском кода. Мой код добавляет товар в сумку, затем я хочу выбрать количество товара. Когда я нажимаю на количество в выпадающем меню, чтобы выбрать 2.

Мой код выдает исключение в этой строке:

IWebElement Qty = webDriver.FindElement(By.Id("bagApp"));
SelectElementFromDropDown(Qty, "2");

Элемент должен был быть выбран, но был div.

Этот фрагмент кода предназначен для нажатия на раскрывающееся меню.

Screenshot of inspect

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Interactions;
using System.Threading;

namespace Exercise1
{
    class Exercise3
    {

        static void Main()
        {
            IWebDriver webDriver = new ChromeDriver();


            webDriver.Navigate().GoToUrl("http://www.asos.com/men/");
            webDriver.Manage().Window.Maximize();

            webDriver.FindElement(By.XPath(".//input[@data-testid='search-input']")).SendKeys("nike trainers");

            webDriver.FindElement(By.XPath(".//button[@data-testid='search-button-inline']")).Click();

            WebDriverWait wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(5));
            IWebElement country = wait.Until(ExpectedConditions.ElementExists(By.CssSelector("article img")));


            webDriver.FindElement(By.CssSelector("article img")).Click();


            IWebElement Size = webDriver.FindElement(By.XPath(".//select[@data-id='sizeSelect']"));
            SelectElementFromDropDown(Size, "UK 10.5 - EU 45.5 - US 11.5");


            webDriver.FindElement(By.XPath("//*[@data-bind='text: buttonText']")).Click();

            webDriver.FindElement(By.XPath("//a[@data-testid='bagIcon']")).Click();

            IWebElement Qty = webDriver.FindElement(By.Id("bagApp"));
            SelectElementFromDropDown(Qty, "2");

            webDriver.FindElement(By.XPath("//*[@data-bind='click: update']")).Click();

            //int trainer = 145;

            //while (trainer < 200){
            //    Console.WriteLine(trainer);
            //    trainer = trainer * 2;


            //}

            webDriver.Quit();
        }

        private static void SelectElementFromDropDown(IWebElement ele, string text)
        {
            SelectElement select = new SelectElement(ele);
            select.SelectByText(text);
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Вы можете выбрать webelement, как показано ниже

//Explicit wait is added to ensure that my bag item section is loaded successfully
WebDriverWait wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(5));
wait.Until(ExpectedConditions.ElementExists(By.XPath("//select[contains(@class,'bag-item-quantity')]")));

IWebElement qtyElement = webDriver.FindElement(By.XPath("//select[contains(@class,'bag-item-quantity')]"));
SelectElementFromDropDown(qtyElement,"2");
0 голосов
/ 25 июня 2018

Ошибка возникает из-за того, что вы используете класс SelectElement для элемента HTML, который не является SELECT, DIV в данном случае.

Чтобы выбрать нужный вариант, нужно щелкнуть раскрывающийся список, чтобы открыть его, а затем выбрать нужный вариант из раскрывающегося списка. Поскольку вы, скорее всего, будете выбирать опции более одного раза, рекомендуется поместить код, чтобы сделать это, в функцию.

public void SelectOption(string s)
{
    new WebDriverWait(webDriver, TimeSpan.FromSeconds(5)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector($"span[title='{s}']"))).Click();
}

Тогда назовите это как

webDriver.FindElement(By.CssSelector("span.select2")).Click();
SelectOption("2");
0 голосов
/ 25 июня 2018

Вы выпадающий состоит из Div и spans , выбор класса не поможет вам в этом случае.

Вы можете попробовать этот код:

IList<IWebElement> options= webDriver.FindElements(By.CssSelector("li[class*='select2-results__option']"));  
foreach (IWebElement element in options){  
     if(element.GetText().Equals("2")){  

        element.Click();
    }
    }

Обратите внимание, что прежде чем пытаться выбрать значение из выпадающего списка, вы должны нажать на кнопку со стрелкой вниз, чтобы использовать этот код :

webDriver.FindElement(By.CssSelector("span#select2-d2bx-container+span")).Click() 

Вы должны использовать явное ожидание при переходе на новую страницу для этой операции.

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