Я немного новичок в селене с C #, у меня есть следующий код
GlobalClass glc = new GlobalClass();
glc.waitForElementToBeClickable("select2-mainCorporateCustomers-results",7);
glc.randomClickULOption("select2-mainCorporateCustomers-results");
Thread.Sleep(5000);
glc.ClickDropdownbyText("MyDropDownName");
И ниже метод waitForElementToBeClickable в глобальном классе:
public void waitForElementToBeClickable(string elementID, double waitTime)
{
DefaultWait<IWebDriver> wait = new DefaultWait<IWebDriver>browserDriver);
wait.Timeout = TimeSpan.FromSeconds(waitTime);
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
IWebElement searchResult =
wait.Until(ExpectedConditions.ElementToBeClickable(By.Id(elementID)));
}
И нижемой метод randomClickULOption в глобальном классе, который случайным образом нажимает на элемент в указанном списке:
public void randomClickULOption(string ComboID)
{
int itemsCount = 0;
IWebElement comboName = browserDriver.FindElement(By.Id(ComboID));
IList<IWebElement> listItems =
comboName.FindElements(By.TagName("li"));
foreach (IWebElement element in listItems)
{
itemsCount = itemsCount + 1;
}
if (itemsCount==0)
{
Assert.Fail("No items in the combo box");
}
Random rand = new Random();
int iSelect = rand.Next(itemsCount);
//Selecting value from DropDownList
listItems[iSelect].Click();
}
А ниже мой ClickDropdownbyText, который открывает раскрывающееся меню с его текстом
public void ClickDropdownbyText(string text)
{
var clickPath = "//span[contains(text(), '" + text + "')]";
browserDriver.FindElement(By.XPath(clickPath)).Click();
}
Моя проблема заключается в том, что при запуске тестового примера выдается следующее исключение:
OpenQA.Selenium.NoSuchElementException: нет такого элемента: невозможно найти элемент: {"method": "xpath", "selector": "// span [содержит (text (), 'MyDropDownName')]"}
И когда я ставлю точку останова на следующую строку в моем тестовом примере:
glc.randomClickULOption("select2-mainCorporateCustomers-results");
и пошагово отлаживаем код, тестовый пример проходит без проблем
Обратите внимание, я попытался увеличить или уменьшить время ожидания в следующей строке:
glc.waitForElementToBeClickable("select2-mainCorporateCustomers-results",3);
Дополнительные примечания: нижестрока кода не актуальнавыполняется в пользовательском интерфейсе веб-страницы:
browserDriver.FindElement(By.XPath(clickPath)).Click();
Я имею в виду, что эта строка должна щелкнуть элемент списка, прежде чем переходить к оставшемуся коду, а на веб-странице этого не происходит, однако она успешно проходит при отладке.мой код
Но проблема все еще существует.Так в чем же проблема?