首页 > 解决方案 > 在框架内定位元素

问题描述

我有以下 HTML 代码:

<td class="gnb_menu" id="MAIN_04" name="MAIN_04" style="width:100px;text-align:center;">
  <span style="cursor:pointer;"  onclick="javascript:movePage('MAIN_04','/basis/menuServlet.do?method=getMenuUrl','body','Y')">
    <nobr>Business</nobr>
  </span>
</td>

我正在尝试获取 span 标签的 XPath。我正在使用 Selenium 并尝试过这个:

cd.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
var d = cd.FindElementByXPath("//td[@id='MAIN_04']/span[@style='cursor:pointer;']");
d.Click();

但是一直遇到错误:"OpenQA.Selenium.NoSuchElementException has been thrown"因为它无法找到元素/没有这样的元素。

我已经尝试了许多不同的 XPath (//*[@id='MAIN_04']/span)(//td[@id='MAIN_04']/span)等等,但仍然无法做到这一点。我什至试图去掉隐式等待,因为我认为这是一个超时错误......我不知道。

请帮助我是新手,我很困惑。谢谢!

标签: c#htmlseleniumselenium-webdriverxpath

解决方案


经过两天研究这个小错误,我想通了!

该代码位于框架标签内。我的印象是,只有代码在 iframe 标记内才重要,但我错了。这是我修改后的工作代码:

// Found the frame using its XPath (cd is my Chrome Driver)
IWebElement frame = cd.FindElement(By.XPath("/html/frameset/frame[2]"));
cd.SwitchTo().Frame(frame);
// Found the XPath of the span tag where my error was occurring 
IWebElement d = cd.FindElement(By.XPath("//td[@id='MAIN_04']/span"));
d.Click();

HTML 代码是:

<frame name="menu" src="/basis/common/topMenu.jsp" scrolling="no" marginwidth="0" noresize="" marginheight="0">
...
...
  <td class="gnb_menu" id="MAIN_04" name="MAIN_04" style="width:100px;text-align:center;">
    <span style="cursor:pointer;" onclick="javascript:movePage('MAIN_04','/basis/menuServlet.do?method=getMenuUrl','body','Y')">
      <nobr>Business</nobr>
  </span>
</td>

在我的情况下,我不需要切换回我的默认框架/内容,但如果你这样做:

cd.SwitchTo().DefaultContent();

在@Andersson 和iFrame Question的帮助下得到了这个!多谢你们 :)


推荐阅读