首页 > 解决方案 > Selenium 无法找到具有 data-testid 属性的元素

问题描述

试图找到以下元素尝试了以下没有任何效果的任何人都可以提供帮助。

<button data-testid="addToClientBasket" 
        class="sc-kfGgVZ kcCRfu">
    <span><i class="icon-Expand_Cross_30_by_30"></i>Add To Basket</span>
</button>
By.xpath("//button[@data-testid='addToClientBasket'");

By.xpath("//div[@id='root']/div/div/div/div[4]/div/div/div[2]/button/span";

By.cssSelector("button.sc-kfGgVZ.kcCRfu.added");

By.cssSelector("button.sc-kfGgVZ.kcCR");

By.cssSelector("button[class='sc-kfGgVZ kcCRfu']");

标签: javaselenium-webdriverxpathcss-selectorswebdriverwait

解决方案


要使用Selenium将带有文本的元素标识为Add To Basket ,您可以使用以下任一Locator Strategies

  • 选择器

    driver.findElement(By.cssSelector("button[data-testid='addToClientBasket']>span>i.icon-Expand_Cross_30_by_30"));
    
  • 路径

    driver.findElement(By.xpath("//button[@data-testid='addToClientBasket']/span[contains(., 'Add To Basket')]"));
    

据推测,继续前进,您将click()在元素上调用,在这种情况下,理想情况下您需要诱导WebDriverWait并且elementToBeClickable()您可以使用以下任一Locator Strategies

  • cssSelector

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("button[data-testid='addToClientBasket']>span>i.icon-Expand_Cross_30_by_30"))).click();
    
  • xpath

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@data-testid='addToClientBasket']/span[contains(., 'Add To Basket')]"))).click();
    

推荐阅读