【发布时间】:2017-02-13 17:20:54
【问题描述】:
使用 selenium 无法单击带有 href 值为 javascript 的框架内的锚点。
@注意:我可以从 IE 开发人员控制台手动单击/调用 javascript,一切看起来都不错。问题只是通过硒。
这里是页面源代码
<html>
<body>
<p>
<iframe name="iframe1" width="100" height="218" src="about:blank" frameborder="0" marginwidth="0" "marginheight="0" scrolling="yes">
<html>
<body>
<div class="className" id="DivName"onmouseover="startLinkHover(0,70)" onmouseout="stopLinkHover()">
<a name="link0" href="javascript:function()" shape=""> This is link 1 </a>
</div>
</body>
</html>
</iframe>
</p>
</body>
</html>
我正在使用 c#、IE 和 selenium
Selenium.WebDriver.IEDriver" version="2.53.1.1"
Selenium.WebDriver" version="3.0.0"
Selenium.Support" version="3.0.0"
IE 11 ( As my web application only support IE)
这是我尝试过的: 因为它的页面是由 iframe 组成的
1) 我正在切换到 iframe 并使用名称找到锚点并单击
driver.SwitchTo().Frame(driver.FindElement(By.Name("iframe1"));
driver.FindElement(By.XPath("//a[@name='link0']")).click();
2)我还尝试将 href 属性提取到字符串变量中,并尝试使用 Javascript 执行器执行 javascript。
driver.SwitchTo().Frame(driver.FindElement(By.Name("iframe1"));
var js=driver.FindElement(By.XPath("//a[@name='link0']")).GetAttribute("href");
var jsDriver = (IJavaScriptExecutor)driver;
jsDriver.ExecuteScript(js);
如果有任何拼写错误,请原谅,因为我不想在这里发布 html 源代码,我已经用示例解释了我的问题。
谢谢
【问题讨论】:
-
为什么是
<a name="link0" href="javascript:function()" shape=""> This is link 1 </a>?href="javascript:function()"是否从服务器返回一个页面,或者我以错误的方式看到这个?href="javascript:function()"在哪里被执行? “不能点击框架内的锚点”你的意思是它没有做任何事情?控制台有错误吗? -
谢谢 Diego,不,它不会返回页面。奇怪的是,他们使用了来自 href 的 javascript 函数调用,而不是“onclick”等。在尝试调用该函数但立即返回而没有任何异常的意义上,无法单击。控制台上没有错误。这是我们正在尝试集成的第三方应用程序,我没有太多帮助。我想找出我尝试做的方式有什么问题?以及任何其他更好的方法。其他令人沮丧的事情是通过 selenium 运行时禁用 F12 进行调试。
-
您尝试的第一个选项是否有任何错误?您确定您在正确的 iframe 中,并且在此之前没有另一个名称相似的 iframe?
-
没有错误。是的,只有一个具有该名称的框架。正如您从第二个选项中看到的那样,我能够在该框架下找到元素并读取 href 属性(javascript 函数)并尝试执行它。我在调试时在 IE 上打开 F12 开发人员工具时遇到问题。它抛出 500 错误。但是如果我手动尝试打开 F12 时没有问题(没有硒调试模式)
-
我注意到的另一件事是,在调试时,即使我想直接单击而不是通过 selenium。它什么也没做。
标签: javascript selenium iframe