簡體   English   中英

使用硒懸停在父菜單項上后選擇菜單項

[英]Selecting a menu item after hovering over a parent menu item using selenium

將鼠標懸停在“ Asmt Admin”父菜單項選項上后,我想選擇“ Application Processing”菜單項。 html如下:

<div id="topmenu">
    <div id="ctl00_topMenu1" class="RadMenu RadMenu_GovernBlue rmSized">
        <ul class="rmRootGroup rmShadows rmHorizontal">
            <li class="rmItem">
                <a class="rmLink rmRootLink" href="#">
                    <span class="rmText rmExpandDown">Asmt Admin</span>
                </a>
                <div class="rmSlide">
                    <ul class="rmVertical rmGroup rmLevel1">
                        <li class="rmItem ">
                            <a class="rmLink" href="#">
                                <span class="rmText">Application Processing</span>
                            </a>
                        </li>
                    </ul>
                </div>
            </li>        
        </ul>
    </div>
</div>

我嘗試如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains

browser = webdriver.Chrome()
browser.get(('localhost:81'))

wait = WebDriverWait(browser, 10)
AsmtAdmin = wait.until(EC.visibility_of_element_located((By.XPATH, "//a/span[text()='Asmt Admin']")))
ActionChains(browser).move_to_element(AsmtAdmin).perform()

ApplicationProcessing = wait.until(EC.visibility_of_element_located((By.XPATH, "//a/span[text()='Application Processing']")))
ActionChains(browser).move_to_element(ApplicationProcessing).click().perform()

但是沒有單擊“應用程序處理”菜單項,命令行也沒有顯示任何錯誤。

在此處輸入圖片說明

我究竟做錯了什么? 請幫忙。

您的代碼對我來說看起來不錯,但我建議進行以下2個更改:

  1. 當您正在執行browser.get(('localhost:81'))和下一步時(By.XPATH, "//a/span[text()='Asmt Admin']")我認為您可以省略對WebDriverWait
  2. 搜索元素時(By.XPATH, "//a/span[text()='Application Processing']")而不是EC.visibility_of_element_located ,可以使用EC.element_to_be_clickable
  3. 您的最終代碼將如下所示:

     AsmtAdmin = driver.find_element_by_xpath("//a/span[text()='Asmt Admin']") actions = ActionChains(browser) actions.move_to_element(AsmtAdmin).perform() ApplicationProcessing = WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.XPATH, "//a/span[text()='Application Processing']")) ) ApplicationProcessing.click() 

我能夠使用.Net和C#修復此問題。 我們應該能夠在Python中執行類似的操作。 我相信,重要的部分是使用xpath選擇正確的錨標記,然后使用Enter鍵單擊錨按鈕。

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;
using System;

namespace AutomateQA
{
    class Program
    {
        static void Main(string[] args)
        {
            var usernameStr = "admin";
            var passwordStr = "admin";

            IWebDriver chromeDriver = new ChromeDriver();
            chromeDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
            chromeDriver.Url = "http://localhost:81";

            var txtUserName = chromeDriver.FindElement(By.Id("txtUserName"));
            txtUserName.SendKeys(usernameStr);

            var txtPassword = chromeDriver.FindElement(By.Id("txtPassword"));
            txtPassword.SendKeys(passwordStr);

            var btnLogin = chromeDriver.FindElement(By.Id("btnLogin"));
            btnLogin.Click();

            var asmtAdminElement = chromeDriver.FindElement(By.LinkText("Asmt Admin"));
            var actions = new Actions(chromeDriver);
            actions.MoveToElement(asmtAdminElement).Perform();

            var applicationProcessingSubElement = chromeDriver.FindElement(By.XPath("//a[contains(.,'Application Processing')]"));
            applicationProcessingSubElement.SendKeys(Keys.Enter);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM