有10个项目。我需要单击item_9中的隐藏元素(项目图标)。悬停在他身上后,隐藏的元素就会出现。我有相同的情况,并且相同的代码按预期运行。但是在这种情况下,代码会意外运行,并在控制台中出现错误。 如何单击item_9元素中的item-icon元素?
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]"}
答案 0 :(得分:1)
请尝试使用JavascriptExecutor单击隐藏的元素。
Java中的示例代码:
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);
答案 1 :(得分:1)
如果该元素存在,但是出现错误“ 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
//...
我假设您已经将代码悬停在代码上之前就已经看过,并且如果您未将代码悬停在元素上,那么您提供的代码也将有效。我正在根据提供的数据进行回答:-)
如果没有框架... 使用硒悬停
启动页面且不进行悬停,请使用Chrome DevTools选择应悬停的区域。这将向您显示您需要悬停的元素。您可以对该元素执行element.click(),然后将执行Java脚本来创建所需的元素“ item”。
我希望这会有所帮助...在评论中留下问题:-)