这是一个关于硒的问题,还有关于JS的问题!
因此,请不要使用JS以外的任何其他语言发布答案。
我尝试并无法翻译其他语言的答案。如果您知道可以自动将Selenium代码转换为JS等价物并且可以工作的工具,请告诉我。
我想单击带有硒的项目(selenium-webdriver,使用nodejs),但是当我按ID搜索时找不到所需的元素。
我尝试了许多不同的事情,例如切换框架,但是这种嵌套确实使我受益匪浅。
我将html大页面剥离为基本内容:
-我的目标是选择ID为a
action
标签
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Selenium Test</title>
</head>
<body>
<div id="mainDiv">
<div id="appFrameContainer">
<iframe name="appFrame" id="appFrame" src="/longlink">
#document
<!DOCTYPE HTML>
<html>
<head></head>
<frameset>
<frameset id="frameset2">
<frame src="/longlink2" name="frame1" id="frame1">
#document
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<div id="menu">
<table class="table">
<tbody>
<tr>
<td>
<div>
<ul>
<li id="item">
<span>
<a id="action">
Execute Action
</a>
</span>
</li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
</frame>
</frameset>
</frameset>
</html>
</iframe>
</div>
</div>
</body>
</html>
(不幸的是,当我将文本粘贴到html文件中时,这是一个缩小的示例,第二个body
标签保持空白,我不知道为什么。)
我现在正在尝试类似的操作并收到错误消息:
UnhandledPromiseRejectionWarning: InvalidArgumentError: data did not match any variant of untagged enum FrameId at line 1 column 28
//Setup
const Capabilities = require('selenium-webdriver/lib/capabilities').Capabilities;
let capabilities = Capabilities.firefox();
capabilities.set('acceptInsecureCerts', true);
const firefox = 'firefox';
let driver = new Builder()
.forBrowser(firefox)
.withCapabilities(capabilities)
.build();
driver.get("<url>").then(startAutomation).catch();
//Process
async function startAutomation() {
let mainFrameName = "appFrame";
let idAction = "action";
driver.switchTo().frame(mainFrameName);
driver.findElement(By.id(idAction)).then(e => {
e.click();
});
}
答案 0 :(得分:0)
能否请您检查以下代码是否对您有用(请单击具有id =“ action”的锚标记)
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('appFrame').contentWindow.document.getElementById('action').click();")