【问题标题】:Cannot click on Angular-JS button with selenium web-driver: ElementNotVisibleException无法使用 selenium web 驱动程序单击 Angular-JS 按钮:ElementNotVisibleException
【发布时间】:2015-06-10 04:40:27
【问题描述】:

我试图点击这个按钮(它在页面上并且清晰可见):

<button class="ui tertiary button" data-ng-click="addRoom()" data-ng-disabled="pendingRequests >= 1">ADD ROOM TO CRUISE CART</button>

这是我的代码:

driver.FindElement(By.CssSelector("button[data-ng-click^='addRoom']")).Click();

它总是抛出这个错误:

OpenQA.Selenium.ElementNotVisibleException : 元素当前不可见,因此可能无法与之交互

Selenium WebDriver 与 Angular JS 兼容吗?

【问题讨论】:

    标签: c# angularjs firefox selenium selenium-webdriver


    【解决方案1】:

    我已设法确定问题所在,有多个按钮具有完全相同的 XPath,一个在给定时间可见,另一个不可见。我

       var list = driver.FindElements(By.CssSelector("a[data-ng-click='addRoom()']")).ToList();
    
            foreach (var item in list)
            {
                Console.WriteLine(item.Displayed);
    
                if(item.Displayed)
                {
                    item.Click();
                }
            }
    

    这得到了激活按钮,感谢您的所有帮助。我现在可以继续前进了

    【讨论】:

      【解决方案2】:

      遇到同样的问题,你可以这样做(使用 linq)

      driver.FindElement(By.CssSelector("button[data-ng-click^='addRoom']")).First(x=>x.Displayed()).Click();
      

      【讨论】:

        【解决方案3】:

        将您的代码更改为以下内容:

        driver.findElement(By.xpath("//button[contains(text(),'ADD ROOM TO CRUISE CART')]")).click();
        

        【讨论】:

        • 对不起,我应该提到文本是动态的,所以我不能使用 ADD ROOM TO CRUISE CART 作为参考
        • driver.FindElement(By.LinkText("添加房间到巡航车")).Click();可以,但添加房间到巡航车的文字会改变,所以我不能使用它
        • 投反对票 使用这个代替你的代码 driver.findElement(By.xpath("//button[@data-ng-click='addRoom()']")).click();
        • 使用此代码 driver.findElement(By.xpath("//button[@data-ng-click='addRoom()']")).click();
        猜你喜欢
        • 2021-10-15
        • 1970-01-01
        • 2014-05-30
        • 2016-10-04
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        • 2016-05-31
        • 1970-01-01
        相关资源
        最近更新 更多