【问题标题】:Selenium xpath not clicking on Image linkSelenium xpath 没有点击图片链接
【发布时间】:2021-05-02 20:23:54
【问题描述】:

我正在尝试使用 selenium 来选择搜索中的第一个结果。

使用 xpath 方式点击第一张图片,从搜索中找到第一个结果。 代码是

driver.findElement(By.xpath("//*[@id='category-search-wrapper']/div[2]/div/ol/li[1]/article/a")).click();

通过使用网站上的 f12 和 ctrl f 工具,它表明我有正确的 xpath

但是,它没有单击图像。 这是我正在尝试测试的网站是否有帮助。 https://www.dunnesstores.com/search?keywords=lamp

【问题讨论】:

    标签: java selenium xpath css-selectors webdriverwait


    【解决方案1】:

    click(),在搜索的第一个结果上,您需要将WebDriverWait 诱导为elementToBeClickable(),您可以使用以下Locator Strategies 之一:

    • cssSelector

      driver.get("https://www.dunnesstores.com/search?keywords=lamp")
      new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("button#onetrust-accept-btn-handler"))).click();
      new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("ol.product-list.product-list-main > li a"))).click();
      
    • xpath

      driver.get("https://www.dunnesstores.com/search?keywords=lamp")
      new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@id='onetrust-accept-btn-handler']"))).click();
      new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//ol[@class='product-list product-list-main']/li//a"))).click();
      
    • 浏览器快照:

    【讨论】:

      【解决方案2】:
      driver = webdriver.Chrome()
      driver.get('https://www.dunnesstores.com/search?keywords=lamp')
      
      accept = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR,
                                                                              "#onetrust-accept-btn-handler")))
      
      accept.click()
      
      driver.find_element_by_css_selector(
          '[class="c-product-card__link"]').click()
      

      你必须先点击接受cookies,然后使用class或xpath或css查找元素

      【讨论】:

        【解决方案3】:

        试试:

        element = driver.findElement(By.xpath("//*[@id='category-search-wrapper']/div[2]/div/ol/li[1]/article/a"))
        driver.executeScript("arguments[0].click();", element) 
        

        使用此代码,您可以避免隐藏它的元素以及实际屏幕中不可分配的元素(超出滚动范围)。

        【讨论】:

          猜你喜欢
          • 2020-11-27
          • 1970-01-01
          • 2020-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多