如何通过selenium中的文本找到按钮(java)?

sh7euo9m  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(365)

我有下面这样一个按钮。我不知道如何抓住它的文本,这是搜索。这个页面上有许多按钮。

<button _ngcontent-dqg-c23="" class="cp-mat-small-btn mat-flat-button mat-accent" color="accent" mat-flat-button="" ng-reflect-disabled="false" ng-reflect-color="accent"><span class="mat-button-wrapper">
    Search
  </span><div class="mat-button-ripple mat-ripple" matripple="" ng-reflect-centered="false" ng-reflect-disabled="false" ng-reflect-trigger="[object HTMLButtonElement]"></div><div class="mat-button-focus-overlay"></div></button>

我试过:

WebElement searchBtn = webDriver.find_element_by_xpath('//button[text()="Search"]');

但是得到错误:

| > Task :compileTestJava
gauge_1          | /tipu/src/test/java/CalmImplementation.java:16: error: unclosed character literal
gauge_1          |         WebElement searchBtn = webDriver.find_element_by_xpath('//button[normalize-space()="Search"]');
gauge_1          |                                                                ^
gauge_1          | /tipu/src/test/java/CalmImplementation.java.java:16: error: unclosed character literal
gauge_1          |         WebElement searchBtn = webDriver.find_element_by_xpath('//button[normalize-space()="Search"]');
gauge_1          |                                                                                                     ^
gauge_1          | /tipu/src/test/java/CalmImplementation.java.java:16: error: not a statement
gauge_1          |         WebElement searchBtn = webDriver.find_element_by_xpath('//button[normalize-space()="Search"]');
gauge_1          |                                                                         ^
gauge_1          | 3 errors
gauge_1          |
envsm3lx

envsm3lx1#

find_element_by_xpath() 在使用selenium的java客户端时不是有效的方法。
同样,以文本作为搜索的webelement在子元素中 <span> 它的父母 <button> 还有一个角元素。
因此,要通过文本识别元素,即搜索,您需要为 elementToBeClickable() 您可以使用以下任一定位器策略:
使用 xpath 以及 contains() :

WebElement searchBtn = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button/span[contains(., 'Search')]")));

使用 xpath 以及 normalize-space() :

WebElement searchBtn = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button/span[normalize-space()='Search']")));
zazmityj

zazmityj2#

可以使用xpath:

//button[normalize-space()="Search"]

请注意,搜索方式 text()="Search" 不会工作,因为按钮文本不完全正确 "Search" -文本内容包含行break/spaces

相关问题