我有以下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)
等,但是仍然无法解决这个问题。我什至试图消除隐式等待,因为我认为这是超时错误...我不知道。
请帮助我对此并不陌生,我很困惑。谢谢!
答案 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的帮助下做到了!谢谢大家:)