Selenium无法找到具有data-testid属性的元素

时间:2020-05-31 20:00:22

标签: java selenium-webdriver xpath css-selectors webdriverwait

尝试查找以下元素尝试了以下任何操作,任何人都可以帮忙。

<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']");

2 个答案:

答案 0 :(得分:0)

尝试使用以下定位器

button.sc-kfGgVZ.kcCRfu
button[data-testid="addToClientBasket"]

//button[@class='sc-kfGgVZ kcCRfu']
//button[@data-testid="addToClientBasket"]

以及在您的案例中定位器不起作用的原因

By.xpath(“ // button [@ data-testid ='addToClientBasket'”);

属性值后无右括号

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

不确定您的元素路径是否正确

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

没有具有added类名的按钮

By.cssSelector(“ button.sc-kfGgVZ.kcCR”);

没有指定类别组合的按钮

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

这些是2类,因此您必须用.

替换空白

答案 1 :(得分:0)

要使用Selenium将文本标识为添加到购物篮,您可以使用以下Locator Strategies之一:

  • cssSelector

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

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

大概,继续前进,您将在元素上调用click(),在这种情况下,理想情况下,您需要为elementToBeClickable()引入WebDriverWait,并且可以使用以下{{ 3}}:

  • 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();