如何通过里面的文本 (Java) 找到带有 Selenium 的按钮?
How to find button with Selenium by its text inside (Java)?
我有一个如下所示的按钮。我不确定如何通过 Search 的文本来获取它。这个页面有很多按钮。
<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 |
您可以使用 XPATH:
//button[normalize-space()="Search"]
请注意,按 text()="Search"
搜索将不起作用,因为按钮文本不完全 "Search"
- 文本内容包含 linesbreaks/spaces
find_element_by_xpath()
在使用 的 Java 客户端时不是有效方法。
同样, with text as Search is within the child <span>
of it's parent <button>
and an Angular 元素。
因此,要通过文本识别元素,即 搜索,您需要引入 for the elementToBeClickable()
and you can use either of the following :
使用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']")));
我有一个如下所示的按钮。我不确定如何通过 Search 的文本来获取它。这个页面有很多按钮。
<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 |
您可以使用 XPATH:
//button[normalize-space()="Search"]
请注意,按 text()="Search"
搜索将不起作用,因为按钮文本不完全 "Search"
- 文本内容包含 linesbreaks/spaces
find_element_by_xpath()
在使用
同样,<span>
of it's parent <button>
and an Angular 元素。
因此,要通过文本识别元素,即 搜索,您需要引入 elementToBeClickable()
and you can use either of the following
使用
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']")));