java 如何使用Selenium选中与特定文本关联的mat-row中的复选框

ux6nzvsh  于 2023-02-14  发布在  Java
关注(0)|答案(1)|浏览(66)

我尝试选中下面嵌套mat-row中的复选框:

<mat-row _ngcontent-dac-c252="" role="row" class="mat-row cdk-row ng-star-inserted">
  <mat-cell _ngcontent-dac-c252="" role="cell" class="mat-cell cdk-cell cdk-column-select mat-column-select ng-star-inserted">
    <mat-checkbox _ngcontent-dac-c252="" class="mat-checkbox mat-accent ng-valid ng-dirty ng-touched" id="mat-checkbox-123">
      <label class="mat-checkbox-layout" for="mat-checkbox-123-input">
        <span class="mat-checkbox-inner-container mat-checkbox-inner-container-no-side-margin">
          <input type="checkbox" class="mat-checkbox-input cdk-visually-hidden" id="mat-checkbox-123-input" tabindex="0" aria-checked="false">
          <span matripple="" class="mat-ripple mat-checkbox-ripple mat-focus-indicator">
            <span class="mat-ripple-element mat-checkbox-persistent-ripple"></span>
          </span>
          <span class="mat-checkbox-frame"></span>
          <span class="mat-checkbox-background">
            <svg version="1.1" focusable="false" viewBox="0 0 24 24" xml:space="preserve" aria-hidden="true" class="mat-checkbox-checkmark">
              <path fill="none" stroke="white" d="M4.1,12.7 9,17.6 20.3,6.3" class="mat-checkbox-checkmark-path"></path>
            </svg>
            <span class="mat-checkbox-mixedmark"></span>
          </span>
        </span>
        <span class="mat-checkbox-label">
          <span style="display: none;">&nbsp;</span>
        </span>
      </label>
    </mat-checkbox>
  </mat-cell>
  <mat-cell _ngcontent-dac-c252="" role="cell" class="mat-tooltip-trigger mat-cell cdk-cell cdk-column-type mat-column-type ng-star-inserted" aria-describedby="cdk-describedby-message-34" cdk-describedby-host="0">
    <span _ngcontent-dac-c252="" class="mobile-label">Type</span>
    <button _ngcontent-dac-c252="" type="button" mat-icon-button="" class="mat-focus-indicator mat-icon-button mat-button-base mat-primary">
      <span class="mat-button-wrapper">
        <mat-icon _ngcontent-dac-c252="" role="img" class="mat-icon notranslate material-icons mat-icon-no-color ng-star-inserted" aria-hidden="true" data-mat-icon-type="font">folder_open</mat-icon>
        <!---->
        <!---->
        <!---->
        <!---->
      </span>
      <span matripple="" class="mat-ripple mat-button-ripple mat-button-ripple-round"></span>
      <span class="mat-button-focus-overlay"></span>
    </button>
  </mat-cell>
  <!---->
  <mat-cell _ngcontent-dac-c252="" role="cell" class="mat-cell cdk-cell cdk-column-name mat-column-name ng-star-inserted">
    <span _ngcontent-dac-c252="" class="mobile-label">Name </span>
    <a _ngcontent-dac-c252="" style="cursor: pointer;" class="ng-star-inserted"> AUTO_001 </a>
    <!---->
    <!---->
  </mat-cell>
  <mat-cell _ngcontent-dac-c252="" role="cell" class="mat-cell cdk-cell cdk-column-updated mat-column-updated ng-star-inserted">
    <span _ngcontent-dac-c252="" class="mobile-label">Date modified</span> 2/13/2023, 2:06:26 PM
  </mat-cell>
  <mat-cell _ngcontent-dac-c252="" role="cell" class="mat-cell cdk-cell cdk-column-edit mat-column-edit ng-star-inserted" hidden="">
    <span _ngcontent-dac-c252="" class="mobile-label">Edit</span>
    <button _ngcontent-dac-c252="" type="button" mat-icon-button="" aria-label="Edit" class="mat-focus-indicator mat-tooltip-trigger mat-icon-button mat-button-base">
      <span class="mat-button-wrapper">
        <mat-icon _ngcontent-dac-c252="" role="img" color="primary" class="mat-icon notranslate mat-primary material-icons" aria-hidden="true" data-mat-icon-type="font">edit</mat-icon>
      </span>
      <span matripple="" class="mat-ripple mat-button-ripple mat-button-ripple-round"></span>
      <span class="mat-button-focus-overlay"></span>
    </button>
    <!---->
    <!---->
    <!---->
  </mat-cell>
  <!---->
</mat-row>

在该行的深处有一个复选框,我想选中包含AUTO_001的行的复选框。
我试过了,但没用:

WebElement checkbox = setup.driver.findElement(By.xpath("//*[contains(text(),'AUTO_001')]//input[@class='mat-checkbox-input cdk-visually-hidden']"));
checkbox.click();

你能帮助我如何勾选复选框吗?

lymnna71

lymnna711#

元素是Angular元素,因此要在元素上执行click(),需要为elementToBeClickable()导出WebDriverWait,可以使用以下locator strategies

  • 使用 * xpath *:
new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='ng-star-inserted' and contains(., 'AUTO_001')]//ancestor::mat-cell[1]//preceding-sibling::mat-cell[2]//input"))).click();

更新

作为替代方法,您可以使用executeScript()方法,如下所示:

WebElement elem = new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='ng-star-inserted' and contains(., 'AUTO_001')]//ancestor::mat-cell[1]//preceding-sibling::mat-cell[2]//input")));
((JavascriptExecutor)driver).executeScript("arguments[0].click();", elem);

相关问题