如何通过Selenium的内部文本找到按钮(Java)



我有一个按钮,如下所示。我不知道如何通过搜索的文本来获取它。这个页面上有很多按钮。

<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          | 

find_element_by_xpath()在使用Selenium的Java客户端时不是有效的方法。

同样,文本为Search的WebElement位于其父<button>和Angular元素的子<span>中。

因此,要通过文本识别元素,即搜索,您需要诱导WebDriverWait等待elementToBeClickable(),您可以使用以下定位器策略之一:

  • 使用xpathcontains():

    WebElement searchBtn = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button/span[contains(., 'Search')]")));
    
  • 使用xpathnormalize-space():

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

您可以使用XPATH:

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

注意,text()="Search"的搜索不起作用,因为按钮文本不完全是"Search"-文本内容包含换行符/空格

最新更新