[英]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个更改:
browser.get(('localhost:81'))
和下一步时(By.XPATH, "//a/span[text()='Asmt Admin']")
我认为您可以省略对WebDriverWait
。 (By.XPATH, "//a/span[text()='Application Processing']")
而不是EC.visibility_of_element_located
,可以使用EC.element_to_be_clickable
您的最终代码将如下所示:
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.