在框架内找到元素

时间:2018-10-03 14:59:16

标签: c# html selenium selenium-webdriver xpath

我有以下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)等,但是仍然无法解决这个问题。我什至试图消除隐式等待,因为我认为这是超时错误...我不知道。

请帮助我对此并不陌生,我很困惑。谢谢!

1 个答案:

答案 0 :(得分:0)

研究了这个小错误两天后,我发现了它!

代码在frame标记内。我的印象是,仅当代码在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的帮助下做到了!谢谢大家:)