【问题标题】:click only visible element selenium webdriverjs仅单击可见元素 selenium webdriverjs
【发布时间】:2017-06-20 06:16:27
【问题描述】:

我有多个如下所示的 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'))
}

【问题讨论】:

  • 你试过try/catch吗?

标签: selenium selenium-webdriver


【解决方案1】:

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

【讨论】:

  • 糟糕,我照原样复制了您的代码。实际上你得到了一组元素。所以你需要迭代它们。更新了我的代码,现在检查一下。
【解决方案2】:

通常很多Java Scripts 都是在node Js 中运行而无需转换。 你有没有在节点Js中尝试过而不转换??? ** 记得导入 selenium

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2016-06-04
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多