selenium 中的 isEnabled() 函数总是 returns true,当 webdriver 在使用 Angular 6 开发的站点上为 运行 时

isEnabled() function in selenium always returns true, when webdriver is running on sites developed using Angular 6

selenium webdriver 中的 isEnabled() 函数 returns 当 webdriver 在使用 Angular 开发的站点上 运行 时,始终为真 6. 所有相关答案对于这个话题,我发现谈到禁用不是属性而是写在按钮的 class 中。检查此 link 以获得详细说明。

Button enabled or disabled : How does webdriver decide?

但是我正在做的网站的代码没有写在class里面。这是我网站的代码。

<button _ngcontent-c61="" class="push-right-sm mat-raised-button mat-primary" color="primary" mat-raised-button="" disabled="">
<span class="mat-button-wrapper">SAVE</span><div class="mat-button-ripple mat-ripple" matripple=""></div><div class="mat-button-focus-overlay"></div></button>

我应该如何检查这个元素是否正确启用?

编辑:这是我通过代码检查它的方法。

WebElement button = driver.findElement(By.xpath("//button/span[contains(text(),'SAVE')]"));
if(button.isEnabled()){ System.out.println("The button is enabled."); }

您的定位器正在 BUTTON 内找到 SPAN 而不是按钮本身。尝试

//button[./span[.='SAVE']]

注意:在这种情况下您不需要使用 contains(),因为整个文本都是 "SAVE",所以我删除了 contains().

这基本上读作找到 BUTTON,其中 SPAN 包含等于 "SAVE" 的文本。我在您提供的 HTML 上对其进行了测试,它正在运行。