有 10 个项目。我需要单击item_9中的隐藏元素(项目图标(。隐藏元素在他身上悬停后出现。我有相同的情况,相同的代码按预期运行。但在这种情况下,代码会意外运行,并在控制台中出现错误。 如何单击item_9元素中的项目图标元素?
.html:
<div class="item">
<div class="w">item_1</div>
<div class="d">
<div style="display:none" class="item-icon" role="button" tabindex="-1">
button1
</div>
<div style="display:none" class="item-icon">
button2
</div>
</div>
</div>
<div class="item">
<div class="w">item_2</div>
<div class="d">...</div>
</div>
...
<div class=""><div class="item">
<div class="w">item_10</div>
<div class="d">...</div>
</div></div>
.js:
let findItems = await driver.findElements(By.className("item"));
let items = findItems.map(async elem => await elem.getText());
let allItems = await Promise.all(items);
await driver.findElement(By.xpath(`//div[@class='item'][9]//div[@class='item-icon'][2]`)).click();
控制台错误:
{ NoSuchElementError: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class='item'][9]//div[@class='item-icon'][2]"}
请尝试使用JavascriptExecutor单击隐藏元素。
Java 中的示例代码:
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);
如果该元素存在,但您收到错误"NoSuchElementError",则表示您尝试在代码中查找的元素存在于网页中的"iframe"标签中。例如
<iframe id="iframeID">
<div class="item">
<div class="w">item_2</div>
<div class="d">...</div>
</div>
...
</iframe>
您需要做的是切换到该 iframe,然后找到类名为"item"的元素。
driver.switchTo().frame("iframeNameOrID"); //you can use name or id for that iframe
//OR driver.switchTo().frame(0); the zero is the first iframe, you can use 1 for 2nd and so on...
let findItems = await driver.findElements(By.className("item"));
driver.switchTo().defaultContent(); //switch back to the main webpage
//...
我假设您在将鼠标悬停在代码上之前已经看到了代码,如果您不将鼠标悬停在元素上,您给出的代码也是有效的。我根据提供的数据回答:-(
如果没有 IFRAME...使用硒悬停
启动页面,无需悬停,即可使用 Chrome DevTools 选择应悬停的区域。这将向您显示需要悬停的元素。您可以对该元素执行 element.click((,然后执行 java 脚本来创建所需的元素"item"。
我希望这会有所帮助...在评论中留下问题:-(