【问题标题】:How to identify and click this span in java with selenium?如何使用 selenium 在 java 中识别和单击此跨度?
【发布时间】:2019-12-14 09:49:49
【问题描述】:

我无法获取此 html 的 xpath,因为它给了我错误并且测试用例给出了失败

我尝试了它的外部 div 或按钮的类名

WebDriverWait wait2 = new WebDriverWait (ChromeBroswerObject, 5);
        WebElement element2 = wait2.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"root\"]/div/div/div[3]/div/div[2]/section[2]/div/div[1]/a/p[1]")));
        element2.sendKeys(Keys.ENTER);[enter image description here][1]

【问题讨论】:

  • 如果可以的话请链接,然后我可以创建xpath。
  • bestbuy.ca - 登录 [使用现有帐户] - 将任意数量的商品添加到购物车 - 按照所有需要的步骤完成付款操作“结帐”(最后一步除外)[可能是您需要先查看购物车才能结帐] - 退出。这是我应该怎么做,问题是其中的一部分

标签: java selenium xpath css-selectors webdriverwait


【解决方案1】:
  1. 首先使用 XPath contains() 函数通过部分文本找到父 <p> element
  2. 然后定位following-sibling(下一个具有相同父节点的节点)
  3. 最后通过文本过滤得到的<span>

    //p[contains(text(), 'Save up to')]/following-sibling::p/span[text()='Shop now']
    

参考资料:

【讨论】:

  • 你没有使用我提供的 XPath
  • 我用了它并给了我同样的错误所有他们同样的错误
【解决方案2】:

click()元素上的文本为立即购买,因为该元素是一个动态元素,您必须为elementToBeClickable()诱导WebDriverWait,您可以使用以下任一Locator Strategies:

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("ta[href*='epic-sound-for-epic-study-sessions'] p[class^='offerCta_']>span"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[contains(@href, 'epic-sound-for-epic-study-sessions')]//p[starts-with(@class, 'offer')]/span[text()='Shop now']"))).click();
    

【讨论】:

    【解决方案3】:

    你可以在xpath下面使用这个。

    确保将x 替换为所需的项目编号。

    (//section[@data-automation='dynamic-content-offer-list']//div[contains(@class,'ItemsPerRow')])[x]
    

    截图:

    如果你想获取列表中的所有项目,然后遍历它们,那么你可以使用下面的 xpath 和findElements

    //section[@data-automation='dynamic-content-offer-list']//div[contains(@class,'ItemsPerRow')]
    

    如果您想在链接下获取paragraph,则只需如下扩展 xpath。

    (//section[@data-automation='dynamic-content-offer-list']//div[contains(@class,'ItemsPerRow')]/a/p)[1]
    

    【讨论】:

      【解决方案4】:

      很难准确说出您要点击的内容,但这是我的最佳猜测:

      css 选择器:

      p.offerCta_Bis60
      

      Xpath:

      //p[@class='offerCta_Bis60']
      

      如果这是正确的元素,但 class 属性在你身上发生了变化,你可以试试这个 xpath:

      //p and ./span[text()= 'Shop Now']
      

      对于特定产品,您可以为其添加文本,例如,这会将第二个示例变成这样:

      //a[contains(p/text(), 'Epic sound for epic study sessions.')]/p and ./span[text()= 'Shop Now']
      

      解释:

      您应该确定一些可以依赖的属性来唯一标识元素,最好使用idclass

      在第二个示例中,我正在扫描整个文档 (//) 寻找一个 p 节点,该节点也有一个子节点 (./) span 和文本 Shop Now

      【讨论】:

        【解决方案5】:

        如果您想点击所有立即购买的链接,那么试试这个,

        List<WebElement> links = driver.findElements(By.xpath("//p/span[contains(.,'Shop now')]"));
        for(WebElement link : links)
                {
                    link.click();
                }
        

        或者,如果您只喜欢第一个现在商店链接,

        WebElement element2 = wait2.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[contains(.,'Epic sound for epic study sessions.')]/p/span[contains(.,'Shop now')]")));
                element2.click();
        

        【讨论】:

        • 我使用了 List,它没有给我错误,但它也没有工作,没有任何反应或点击
        • 列表的大小是多少? >0 ?
        猜你喜欢
        • 2021-05-03
        • 2017-12-25
        • 2018-10-06
        • 2020-02-13
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 2018-12-15
        • 2021-11-09
        相关资源
        最近更新 更多