【问题标题】:Selenium webdriver unable locate href element in menuSelenium webdriver 无法在菜单中找到 href 元素
【发布时间】:2016-07-02 23:06:38
【问题描述】:

我正在使用 Selenium Webdriver 和 Java。我不断收到 InvalidSelector 异常错误:我正在尝试单击带有 javascript 的 href 标记中的链接。该链接位于您将鼠标悬停在其上的子菜单中,然后出现链接。这是我的代码不起作用。我想按名称点击:

String xpath = String.format(".//div[@class='submenu_c1'][11]");
WebElement subelement = getDriver().findElement(By.xpath>(xpath));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", subelement);

这里是 HTML:

<div id="submenu" style="position: fixed; display: block; top: 149px; left: 444.5px;">
<div id="shadow" class="divEffectSubList" style="height:520px;width:900px;padding:5px;">
<div class="submenu_c1" style="width:900px;">Search</div>
<ul id="sublist">
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<li>
<a href="javascript:hrefSubmit(startPageForm, 'searchDataEvents');">Data Event</a>
</li>
<li>
<li>
<li>
</ul>
<ul id="sublist">

【问题讨论】:

  • 你有执行悬停动作的组件吗?只有在那之后你的元素dom才会可见你为什么要使用java脚本执行器来点击你的元素?
  • 是的:getDriver().findElement(By.xpath("//*[@id=\"search\"]")).click(); WebElement element = driver.findElement(By.xpath("//*[@id=\"search\"]"));动作动作=新动作(驱动程序); action.moveToElement(element).build().perform();

标签: javascript java selenium xpath href


【解决方案1】:

正如 Slava 指出的那样,标记并不是很好。

您正在寻找的 xpath 表达式是 ".//ul[@id='sublist'][1]/li[13]/a"

我建议改用 css 选择器并改进 html 标记以提高可测试性。看看这个guide from sauce labs folks

firefox 或 chrome 上的控制台也是你的朋友,可以评估 xpath 表达式类型

$x(".//ul[@id='sublist'][1]/li[13]/a")

按回车键,您会在控制台上获得结果。

对于 css 选择器,您可以使用
document.querySelectorAll("ul#sublist:nth-of-type(1) li:nth-of-type(13) a")

同样不需要JavaScriptExecutor,你可以直接找到WebElement,调用webelement上的点击。

最后你没有任何东西格式化定位器,所以不需要使用 String.format。

【讨论】:

  • 我现在得到 NoSuchElementException 代码现在是:WebElement subelement = getDriver().findElement(By.xpath(".//ul[@id='sublist'][1]/li[ 11]/a"));
【解决方案2】:

您的div 似乎已关闭并且仅包含“搜索”文本。 a 元素也不是第 11 个元素。

还有一件事,与问题无关,您似乎有 2 个具有相同 id 的 ul 元素,为多个 DOM 元素提供相同的 id 不是明智之举

希望我能帮上忙

【讨论】:

  • 我是测试人员而不是开发人员。所以 2 ul element id 问题是我无法改变的。我同意你的看法,我看到并认为这是非常错误的。
猜你喜欢
  • 2016-08-13
  • 2015-05-04
  • 2014-05-29
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 2020-11-10
相关资源
最近更新 更多