c# - 在框架内定位元素
问题描述
我有以下 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)
等等,但仍然无法做到这一点。我什至试图去掉隐式等待,因为我认为这是一个超时错误......我不知道。
请帮助我是新手,我很困惑。谢谢!
解决方案
经过两天研究这个小错误,我想通了!
该代码位于框架标签内。我的印象是,只有代码在 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的帮助下得到了这个!多谢你们 :)
推荐阅读
- go - net.Dial 在编译目标 wasm 时总是返回错误
- pytorch - ImportError:无法导入名称“weak_script_method”
- jenkins - Jenkins 管道无法通过 ssh 连接到 unix 机器
- git - 如何使用 IntelliJ 连接到远程 Git 存储库
- file - 在 GCP 中的负载均衡器后面下载大文件失败
- shell - 如果作业被取消,Concourse 会阻止后台进程停止
- gcc - 任何版本的 g++ 作为库?
- mongodb - 使用 Mongoose 和 Mongo 获取一定数量的数组
- ms-access - 为什么我的 SELECT 查询出现错误 3078?
- java - Spring挑选最高优先级的bean