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

无法从selenium点击菜单选项

长孙深
2023-03-14

我正在尝试为我的WebApp选择菜单选项,可以点击菜单,菜单选项也可见,但无法点击菜单选项。

从Selenium API中,如果我试图检查菜单选项的可见性,它会说不可见,但实际上它已经在屏幕上可见了。

是否有使用Selenium IE驱动程序选择菜单和菜单选项的标准。

以下是菜单/菜单选项代码:

<DIV style="BORDER-BOTTOM: 2px outset; POSITION: absolute; BORDER-LEFT: 2px outset; WIDTH: 162px; FONT-FAMILY: Tahoma; BACKGROUND: #e4e4e4; HEIGHT: 106px; FONT-SIZE: 8pt; BORDER-TOP: 2px outset; TOP: 0px; BORDER-RIGHT: 2px outset; LEFT: 0px">
<DIV style="PADDING-BOTTOM: 2px; PADDING-LEFT: 15px; PADDING-RIGHT: 2px; HEIGHT: 17px; COLOR: black; CURSOR: hand; PADDING-TOP: 2px" onmouseover="this.style.background='darkblue';this.style.color='white';" onmouseout="this.style.background=this.runtimeStyle.background;this.style.color='black';" onclick="parent.smConfig_Click(0,'smConfig0')"><SPAN>Config. Management</SPAN> </DIV><INPUT id=lgx_smConfig01 type=hidden SP="" LP="<LinkParams lgx_ID='WideDetail'  FromDate='@Data.DefaultDate.FromDate~' ToDate='@Data.DefaultDate.ToDate~' lgx_DetailID='dtlConfig' FirstTime='1' ConfigType='2'  />" Modal="" Features="" Target="_top" Action="lgx_Frame.aspx"> 
<DIV style="PADDING-BOTTOM: 2px; PADDING-LEFT: 15px; PADDING-RIGHT: 2px; HEIGHT: 17px; COLOR: black; CURSOR: hand; PADDING-TOP: 2px" onmouseover="this.style.background='darkblue';this.style.color='white';" onmouseout="this.style.background=this.runtimeStyle.background;this.style.color='black';" onclick="parent.smConfig_Click(1,'smConfig1')"><SPAN>Custom Configuration</SPAN> </DIV><INPUT id=lgx_smConfig11 type=hidden SP="" LP="<LinkParams lgx_ID='Default'  lgx_ListID='lstCustomConfig' ConfigType='1'  />" Modal="" Features="" Target="_top" Action="lgx_Frame.aspx"> 
<DIV style="PADDING-BOTTOM: 2px; PADDING-LEFT: 15px; PADDING-RIGHT: 2px; HEIGHT: 17px; COLOR: black; CURSOR: hand; PADDING-TOP: 2px" onmouseover="this.style.background='darkblue';this.style.color='white';" onmouseout="this.style.background=this.runtimeStyle.background;this.style.color='black';" onclick="parent.smConfig_Click(2,'smConfig2')"><SPAN>Custom Transition</SPAN> </DIV><INPUT id=lgx_smConfig21 type=hidden SP="" LP="<LinkParams lgx_ID='Default'  lgx_ListID='lstCustomTransition' Flag='512' Title='Custom'  />" Modal="" Features="" Target="_top" Action="lgx_Frame.aspx"> 
<DIV style="PADDING-BOTTOM: 2px; PADDING-LEFT: 15px; PADDING-RIGHT: 2px; HEIGHT: 17px; COLOR: black; CURSOR: hand; PADDING-TOP: 2px" onmouseover="this.style.background='darkblue';this.style.color='white';" onmouseout="this.style.background=this.runtimeStyle.background;this.style.color='black';" onclick="parent.smConfig_Click(3,'smConfig3')"><SPAN>Person Hierarchy Level</SPAN> </DIV><INPUT id=lgx_smConfig31 type=hidden SP="" LP="<LinkParams lgx_ID='Default'  lgx_ListID='lstPersonLevel'  />" Modal="" Features="" Target="_top" Action="lgx_Frame.aspx"> 
<DIV style="PADDING-BOTTOM: 2px; PADDING-LEFT: 15px; PADDING-RIGHT: 2px; HEIGHT: 17px; COLOR: black; CURSOR: hand; PADDING-TOP: 2px" onmouseover="this.style.background='darkblue';this.style.color='white';" onmouseout="this.style.background=this.runtimeStyle.background;this.style.color='black';" onclick="parent.smConfig_Click(4,'smConfig4')"><SPAN>Role</SPAN> </DIV><INPUT id=lgx_smConfig41 type=hidden SP="" LP="<LinkParams lgx_ID='Default'  lgx_ListID='lstRoleConfig'  />" Modal="" Features="" Target="_top" Action="lgx_Frame.aspx"> 
<DIV style="PADDING-BOTTOM: 2px; PADDING-LEFT: 15px; PADDING-RIGHT: 2px; HEIGHT: 17px; COLOR: black; CURSOR: hand; PADDING-TOP: 2px" onmouseover="this.style.background='darkblue';this.style.color='white';" onmouseout="this.style.background=this.runtimeStyle.background;this.style.color='black';" onclick="parent.smConfig_Click(5,'smConfig5')"><SPAN>Status</SPAN> </DIV><INPUT id=lgx_smConfig51 type=hidden SP="" LP="<LinkParams lgx_ID='Default'  lgx_ListID='lstStatusTy'  />" Modal="" Features="" Target="_top" Action="lgx_Frame.aspx"> </DIV></DIV>

在上面的菜单选项代码中,我需要单击角色选项。这个选项在点击配置菜单上是可见的,但是点击任何这样的菜单选项都不会发生,它也不会引发任何异常。

请让我知道你的意见或建议,以解决这个问题。

谢谢

尝试过代码1:

WebElement configMenu = driver.findElement(By.id("mConfigLabel"));
configMenu.click();
WebElement menuOption = driver.findElement(By.xpath("//div[@id='oMenuCntxtsmConfig']/div/div[4]"));
menuOption.click();

尝试代码2:

WebElement configMenu = driver.findElement(By.id("mConfigLabel"));
configMenu.click();
WebElement menuOption = driver.findElement(By.xpath("//div/descendant:span[contains(text(),'Role']"));
menuOption.click();

尝试代码3:

configMenu.click();
Actions builder = new Actions(driver);
WebElement roleMenuOption = driver.findElement(By.xpath("//div[@id='oMenuCntxtsmConfig']/div/div[4]"));
builder.moveToElement(configMenu).click(roleMenuOption).build().perform();

尝试代码4:

WebElement configMenu = driver.findElement(By.id("mConfigLabel"));
configMenu.click();
WebElement roleMenuOption = driver.findElement(By.xpath("//div[@id='oMenuCntxtsmConfig']/div/div[4]"));
((JavascriptExecutor) driver).executeScript("arguments[0].click();", roleMenuOption);

共有2个答案

松正阳
2023-03-14

使用selenium玩下拉/菜单很棘手,因为下拉/菜单项是隐藏的,只有用户单击下拉/菜单才能看到。

你的方法有点对也有点错。。

正确的方式,你正在访问下拉/菜单

错误的方式访问下拉列表/菜单中的项目,因为它们不能直接访问隐藏在菜单/下拉列表中。

请参阅下面的代码以正确访问特定菜单项,

WebElement DropdownList = driver.findElement(By.id("mConfigLabel"));
Select clickThis = new Select(DropdownList);
clickThis.selectByValue("Role");

我假设你手下的ID/下拉列表是“mConfigLabel”

在stackover flow上有不同的代码风格用于访问菜单项。。。请看一看。

希望这能有所帮助......一切顺利:)

陈泰宁
2023-03-14

根据我对你问题的理解,你只需点击部门。

您的html代码表示onclick事件与div关联。这个onclick事件可能会使您的输入(最初显示为隐藏)可见。

现在你也需要点击这个输入。

例如,单击“角色”选项时,需要附加此行

driver.findElementByID("lgx_smConfig41").click();

希望这可能对你有所帮助。

 类似资料:
  • 在测试我的Web应用程序时,我无法单击菜单项(创建缺陷…),如图所示 下面的代码点击图像(手部图像),如图所示 然后菜单打开。现在我想单击菜单项。我正在为此使用下面的代码 但我得到了上面提到的例外。 这是我在网页上的内容: 你能建议一下吗?

  • 我有一个菜单,其中有li(列表)元素,当你鼠标悬停一个特定的标签后启用。 此代码正在正确执行鼠标悬停,但无法单击“登录链接”链接。尽管手动检查元素是否可见 DOM结构-

  • 嗨,我正在尝试自动启动下拉菜单。默认情况下,它的可见性是隐藏的。将鼠标悬停在它上面时,它的可见性属性显示为可见。我可以单击下拉菜单,但是在单击下拉菜单后,我的selenium脚本不能从下拉菜单中选择值。 错误:线程"main"org.openqa.selenium.ElementNotVisibleException异常:无法单击元素 HTML代码段

  • 一直试图点击网站上的单选按钮,但无济于事。 一直试图点击单选按钮和标签,但硒一直抛出没有这样的元素错误,我在这个阶段有点沮丧。 在实际网站上可能更容易看到: https://www.theaa.ie/car-insurance/journey/getting-started 它在输入电子邮件后的页面上。试图让一些测试用例运行,但这些单选按钮不想被点击。

  • 我正在使用Selenium webdriver。我无法从右键单击打开的选项中选择(例如第二个)选项。 在我当前的代码中,我可以右键单击webElement,但无法从右键单击后打开的列表中选择选项,因为它会自动消失。 因此,有了这段代码,我可以右键单击,但右键单击菜单会自动消失。我想从右键菜单中选择第二个选项。 请帮助!!!

  • 我有在下拉列表中选择每个选项的测试用例,但无论我目前做什么,我都会遇到这个错误。 结果消息:系统。InvalidOperationException:元素在点(1170.0333251953125405.4250030517578)处不可单击,因为另一个元素遮挡了它 目前正试图用这个代码改变年份 - WebElement是这样定义的 这是selenium尝试选择拾取时下拉列表的样子。我看不到任何东