单击仅可见元素selenium webdriverjs

时间:2017-06-20 06:16:28

标签: selenium selenium-webdriver

我有多个div,如下所示

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

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

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

我有一个网页,其中有上面的发送消息按钮,其中一次只能看到一个按钮。其他两个按钮通过一些javascript代码隐藏。例如,如果第二个按钮可见,我应该是只能点击那个元素。但在我的selenium代码中,它试图点击第一个隐藏的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'))
}

2 个答案:

答案 0 :(得分:0)

通常,许多Java脚本在没有转换的节点Js中运行。 你有没有在转换节点Js尝试它? **记得输入硒

答案 1 :(得分:0)

你想点击按钮(就代码而言基本上是一个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选择器选择目标元素将是一个更优化的解决方案。这里的关键是让您的目标元素具有唯一性,以便更容易识别。