当前位置: 首页 > 知识库问答 >
问题:

无法在C#中使用WebDriverWait对汉堡包菜单进行显式等待

单于帅
2023-03-14

我最近一直在搞乱C#中的selenium。我偶然发现了一个我目前无法解决的问题。基本上,我试图打开网站左上角的汉堡包“菜单”,并悬停到它的第一个菜单项:“Loterie”,这应该会触发另一个子菜单,在汉堡包菜单旁边弹出一些“子选项”到“Loterie”。

场景将是:菜单->Loterie->用户能够看到这些选项:Sportka/Eurojackpot/Rychle Kacky/等等...

首先,我使用Thread.Sleep来完成任务,它工作了,如下所示:

        m_driver = new ChromeDriver("C:/Users/richard/source/repos/ConsoleApp43");
        m_driver.Url = "https://www.sazka.cz/";
        m_driver.Manage().Window.Maximize();
        IWebElement subMenu = m_driver.FindElement(By.Id("header-menu")); subMenu.Click();
        IWebElement element = m_driver.FindElement(By.XPath("//*[@id='menuElem']/li[1]/a"));
        Actions action = new Actions(m_driver);
        System.Threading.Thread.Sleep(1000);
        action.MoveToElement(element).Perform();  

但是,有人提到这是一种不好的做法,应该使用WebDriverWait类。因此,我尝试使用WebDriverWait类,但无法使其运行。

我已经找到了几个解决方案来处理我的问题,但它们似乎都不起作用,例如Selenium C#中的
显式等待不起作用。怎么啦?
隐式等待命令不起作用-Selenium webdriver C#
如何让webdriver等待页面加载(C#Selenium项目)

        m_driver = new ChromeDriver("C:/Users/richard/source/repos/ConsoleApp43");
        m_driver.Url = "https://www.sazka.cz/";
        m_driver.Manage().Window.Maximize();     
        IWebElement menu = m_driver.FindElement(By.Id("header-menu")); menu.Click();
        WebDriverWait wait = new WebDriverWait(m_driver, TimeSpan.FromSeconds(1));
        var loterie = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='menuElem']/li[1]/a")));
        Actions action = new Actions(m_driver);
        action.MoveToElement(loterie).Build().Perform();

共有1个答案

南宫保臣
2023-03-14

要调用urlhttps://www.sazka.cz/,单击Burger,鼠标悬停在Loterie上,然后click(),将文本作为Sportka,您可以使用以下解决方案:

m_driver = new ChromeDriver("C:/Users/richard/source/repos/ConsoleApp43");
m_driver.Url = "https://www.sazka.cz/";
m_driver.Manage().Window.Maximize();     
new WebDriverWait(m_driver, TimeSpan.FromSeconds(20)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.XPath("//a[@class='show-sidebar' and @id='header-menu']"))).Click();
var loterie = new WebDriverWait(m_driver, TimeSpan.FromSeconds(20)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath("//div[@class='menu-box open']//a[contains(@href,'loterie')]")));
new Actions(m_driver).MoveToElement(loterie).Build().Perform();
var sportka = new WebDriverWait(m_driver, TimeSpan.FromSeconds(20)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.XPath("//div[@class='menu-box open']//a[contains(@href,'loterie')]//following::ul[1]/li/a[contains(.,'Sportka')]")));
new Actions(m_driver).MoveToElement(sportka).Click().Build().Perform();
 类似资料:
  • 我正在学习Bootstrap 4,我已经成功地把我的navbar中的内容变成了汉堡菜单,就像我想要的那样,在更小的屏幕尺寸下。我现在遇到的问题是,成为汉堡菜单的其中一个东西是一个Browse按钮,它以更大的屏幕尺寸显示下拉列表: 在较小的屏幕尺寸下,它确实变成了一个汉堡包菜单,但当我点击汉堡包菜单时,浏览按钮就会出现在它的右边,而这并不是我想要的: 我正在尝试消除在较小屏幕尺寸的点击,并使汉堡包菜

  • 本文向大家介绍如何使用CSS绘制一个汉堡式菜单相关面试题,主要包含被问及如何使用CSS绘制一个汉堡式菜单时的应答技巧和注意事项,需要的朋友参考一下 比较常见的两种方法: 利用元素自身、和伪元素绘制3个长宽一致的矩形,然后设定其y偏移值。 利用上下和自身元素内容绘制:

  • 我有一个boostrap navbar和一个css媒体查询来折叠它,并使它通过一个汉堡包按钮打开,当屏幕低于一定的尺寸(对于移动设备)。但是,我的navbar中也有一个下拉菜单,当navbar全屏展开时,下拉菜单很好地工作,但是当我从hamburger版本的navbar中打开它时,下拉菜单中的按钮不会显示。 下面是NAVBAR的html代码: 这是折叠navbar的CSS媒体查询: 这是我的nav

  • 我已经为我的网站创建了一个汉堡包菜单,我希望它在更大的屏幕尺寸下完全消失。我希望在更大的屏幕尺寸下删除.在我的所有导航元素上显示的类。当我在更大的屏幕尺寸下运行时,我的汉堡包菜单保持打开。我不知道这个问题的解决方案是否简单,但我是一个在js的大块头,我不知道如何解决它。[小汉堡菜单][1] null null

  • 问题内容: 我正在尝试使用链接文本查找元素,我正在使用以下代码 而且我正在追踪 我尝试选择的元素的HTML是 我怎么解决这个问题?? 问题答案: 如果您使用,则应该有一个包含该文本的链接:,但是您有。 对于您的情况,应改为使用: 更新 这是工作示例:

  • 上面的代码工作得很好,但如果我使用wait而不是thread。sleep I get StaleElementReferenceException异常。这是我使用的流畅等待: 这将找到combobox,但再次对combobox执行任何操作将导致NoTouchElement或statestate异常。所以我也尝试了从combobox中选择值: 这超时和doesnot工作! 我如何才能使这项工作,为什