Как использовать Xpath и cssSelector для двух divs с одинаковой HTML-структурой?

#java #html #selenium #xpath

#java #HTML #selenium #xpath

Вопрос:

У меня есть два divs. Требование заключается в том, что мне нужно нажать кнопку «Выбрать стили». Мне нужно найти xpath первого div и второго div, проверив текст кнопки «Выбрать стили», а затем мне нужно нажать на нее. Итак, как найти xpath для divs и щелкнуть по нему.

 <div>
<div class="product-wrapper multi-styles">
  <div class="product">
    <div class="product-image-container">
      <div class="product-label">Women's</div>
    </div>
    <div class="product-name">Women's</div>
    <button type="button" class="button button--primary">Select Styles</button>
  </div>
</div>
<div class="product-wrapper multi-styles">
  <div class="product">
    <div class="product-image-container">
      <div class="product-label">Men's</div>
    </div>
    <div class="product-name">Men's</div>
    <button type="button" class="button button--primary">Select Styles</button>
  </div>
</div>
</div>  

Ответ №1:

Чтобы нажать на две соответствующие кнопки (женские / мужские), используйте следующий XPath :

 //div[@class="product-name"][.="Women's"]/following-sibling::button
//div[@class="product-name"][.="Men's"]/following-sibling::button
  

Синтаксис Selenium (с Python) :

 WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="product-name"][.="Women's"]/following-sibling::button'))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="product-name"][.="Men's"]/following-sibling::button'))).click()
  

Импортирует :

 from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC