繁体   English   中英

Selenium Webdriver:在多级菜单中选择菜单项

[英]Selenium Webdriver: Selecting menu item in multi-level menu

Visual Studio with C#中的Selenium WebDriver。 我已经创建了一个驱动程序对象,正在使用其实例。

我正在尝试访问此网站上的顶部菜单: http : //store.demoqa.com/

第二个菜单元素“产品类别”具有一个子菜单。 我正在尝试模拟“产品类别”元素的鼠标悬停,然后选择并单击列表(附件)中的第一个元素。

到目前为止,这是我在这里和其他地方进行的几次搜索所组成的。 它可以解决单击菜单项(“附件”)的问题。 我看到选择了顶部元素,并且菜单项被“选中”,因为将鼠标悬停在菜单项上时会略微缩进。 但是,从那里我似乎无法单击它。

“ 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()函数似乎不起作用,因为页面没有更改。

如果这是太少的信息,请原谅我,但是我试图将其范围缩小到似乎很困难的代码。

我不明白为什么您的代码无法使用。 但是,如有必要,您可以尝试实施一些显式等待。 我已经尝试了以下方法,并且有效。 注意:我总是建议您使用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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM