单击仅可见元素 Selenium WebDriverJS



我有多个div,如下所示

<div class="one">send Message</div>
<div class="one">send Message</div>
<div class="one">send Message</div>

我有一个网页,其中有如上所述的发送消息按钮,其中一次只能看到一个按钮。另外两个按钮通过一些javascript代码隐藏。因此,例如,如果第二个按钮可见,我应该只能单击该元素。但是在我的硒代码中,它试图单击第一个隐藏的div并且失败了

 driver.findElements(by.className(".one")).then((els) => {
            var element = els[index];
            element.click();
        });

所以基本上我想将下面的javascript代码转换为Selenium nodejs代码,如果有人指导我会有所帮助

var all = document.getElementsByTagName("*");
for (var i = 0, max = all.length; i < max; i++) {
    if (isHidden(all[i]))
        // hidden
    else 
        // visible
}
function isHidden(el) {
    var style = window.getComputedStyle(el);
    return ((style.display === 'none') || (style.visibility === 'hidden'))
}

你想点击可见的按钮(就代码而言基本上是一个div(吗?

如果这是你的主要议程,那么你编写的代码将无法找到所需的元素。当您通过元素的类名而不是其可见性来选择元素时。

您的代码将找到所有匹配的类元素。由于它是一个基本的元素选择器,并且所有按钮都具有相同的类,因此它们基本上呈现在页面上。

方法1

driver.findElements(by.className(".one")).then((els) => {
        for(var key in els){
             var element = els[key];
             if(element.isDisplayed()){ //if visible element
               element.click();            
             }
        }
    });

这里的关键是检查您尝试单击的元素在页面上是否可见。

方法2

通过为目标按钮提供唯一的类。一些类,例如"可点击"或"活动"。因此,使用 Css 选择器选择目标元素将是一个更优化的解决方案。这里的关键是为您的目标元素提供唯一性,使其更具可识别性。

通常许多Java脚本在没有转换的情况下在节点Js中运行。您是否在不转换???的情况下在节点 Js 中尝试过** 记得进口硒

最新更新