2015-05-27 5 views
0

Selenium WebDriver в Visual Studio с C#. Я создал объект-драйвер, в котором я использую экземпляр.Selenium Webdriver: выбор пункта меню в многоуровневом меню

Я пытаюсь получить доступ на этом сайте в верхнем меню: http://store.demoqa.com/

Второй элемент меню «Категория продукта», имеет подменю. Я пытаюсь подражать мышке над элементом «Категория продукта», затем выберите и щелкните первый элемент в списке («Аксессуары»).

Это то, что у меня есть до сих пор, собранные несколькими поисками здесь и в других местах. Он работает над нажатием на пункт меню («Аксессуары»). Я вижу, что выбран верхний элемент и что элемент меню «выбран», потому что он слегка отступает, когда он курсирует над ним. Однако оттуда я не могу нажать кнопку Click().

"menu-item-33" - это верхний пункт меню, категория продукта. «menu-item-34» - это пункт меню «Аксессуары».

Actions action = new Actions(FFDriver.Instance); 
IWebElement we = FFDriver.Instance.FindElement(By.Id("menu-item-33")); 
action.MoveToElement(we).MoveToElement(FFDriver.Instance.FindElement(By.Id("menu-item-34"))).Click().Build().Perform(); 

Он перемещается к нужному элементу, но функция Click() не работает, поскольку страница не изменяется.

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

ответ

1

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

By byId = By.Id("menu-item-33"); 
By css = By.CssSelector("a[href*='product-category/accessories']"); 

Actions action = new Actions(_driver); 
IWebElement we = _driver.FindElement(byId); 
action.MoveToElement(we).Build().Perform(); 
new WebDriverWait(_driver,TimeSpan.FromSeconds(2)).Until(ExpectedConditions.ElementIsVisible(css)).Click(); 
+0

Ничего себе, это сработало. Я думал о попытке найти элементы по-разному из ID, но я не мог понять, почему это изменит ситуацию. Так почему же эта работа, а другая нет? –

+0

И если я использую ваш код и заменяю By.CssSelector на By.Id («menu-item-34»), он не работает. Он даже не находит пункт меню. Но это может быть потому, что поиск по Id отличается от CssSelector? –

+0

Ну, с 'By.Id (" menu-item-34 ")' вы находите 'li' not anchor. Якорь (метка 'a') более точен. Вы также можете попробовать свой код с помощью 'By css = By.CssSelector (« a [href * = 'product-category/accessories'] ");' и это тоже должно работать. – Saifur

Смежные вопросы