xpath - 选择类名称中包含文本的元素

Mat*_*wek 3 testing selenium xpath selenium-webdriver

我正在尝试找到一种方法来选择这个特定的网络元素:

\n\n
<snack-bar-container class="mat-snack-bar-container ng-tns-c43-25 ng-trigger ng-trigger-state snackbar-info mat-snack-bar-center ng-star-inserted" role="alert" style="transform: translateY(0%);"><!----><simple-snack-bar class="mat-simple-snackbar ng-tns-c44-26 ng-trigger ng-trigger-contentFade ng-star-inserted" style="">Asset successfully loaded! <!----><button class="mat-simple-snackbar-action ng-tns-c44-26 ng-star-inserted" style="">Close</button></simple-snack-bar></snack-bar-container>\n
Run Code Online (Sandbox Code Playgroud)\n\n

目前我正在通过文本选择:

\n\n
.//snack-bar-container//*[contains(text(),\'There are errors on the page:\')]\n
Run Code Online (Sandbox Code Playgroud)\n\n

但由于存在本地化(文本翻译),从长远来看,它是不可靠的,问题是,如何选择具有类属性的元素,该类属性在类名称中包含某些特定文本。

\n\n

正如你所看到的,我的网络元素类非常长,并且经常变化,所以我需要检查它是否包含一些特定的文本,我尝试过:

\n\n
.//[contains(@class,\xe2\x80\x99snackbar-info\xe2\x80\x99)]\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它不起作用,有什么建议吗?谢谢。

\n

小智 10

你的说法几乎是正确的。您只是缺少语句开头的 SelectAll (*)。只需添加它,XPath 就应该可以工作:

//*[contains(@class, "snackbar-info")]
Run Code Online (Sandbox Code Playgroud)