1

I am trying to find an specific element with class='name' <h3Brook/h3> then click on the specific button inside of that div. Only care about "Brook" which is under one of the 'puppy_list'

def find_web_element(self, by_locator, element_text):
    web_element=WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(by_locator))
    if web_element == name:
        return web_element
    else:
        pass

Then I want to find the button inside that element I found (brook) that's under class="rounded_button" type="submit" value="View Details" in that same div class with name Brook.

I'm able to do it by hardcoding the xpath but trying to find it by name:

self.homePage=HomePage(self.driver)
    brook = (By.XPATH, '/html/body/div/div[1]/div[3]/div[2]/div/div[4]/form/div/input') #Hardcoded path for Brook
    self.homePage.click_details(brook)
    self.DetailsPage=DetailsPage(self.homePage.driver)

Where click is just click by_locator

ADDING HTML CODE:

  <div class="puppy_list">
    <div class="list_line_odd">
      <div class="image"><img alt="Brook" class="list_image" src="/assets/Brook-ed6c0be3a8830921c5a954d1bc283354.jpg"></div>
      <div class="name">
        <h3>Brook</h3>
      </div>
      <div class="details">
        <h4>Golden Retriever</h4>
        <h4>Female</h4>
      </div>
      <div class="view">
        <form action="/puppies/4" class="button_to" method="get">
          <div><input class="rounded_button" type="submit" value="View Details"></div>
        </form>
      </div>
    </div>
  </div>
  <div class="puppy_list">
    <div class="list_line_even">
      <div class="image"><img alt="Hannah" class="list_image" src="/assets/Hannah-8f4449876737fadb369a7c7bab7fb0da.jpg"></div>
      <div class="name">
        <h3>Hanna2</h3>
      </div>
      <div class="details">
        <h4>Labrador Retriever Mix</h4>
        <h4>Female</h4>
      </div>
      <div class="view">
        <form action="/puppies/3" class="button_to" method="get">
          <div><input class="rounded_button" type="submit" value="View Details"></div>
        </form>
      </div>
    </div>
  </div>
  <div class="puppy_list">
    <div class="list_line_odd">
      <div class="image"><img alt="Maggiemae" class="list_image" src="/assets/MaggieMae-20224817b655d9dc556645ecf49c8d60.jpg"></div>
      <div class="name">
        <h3>Maggie Mae</h3>
      </div>
      <div class="details">
        <h4>Border Colie Mix</h4>
        <h4>Female</h4>
      </div>
      <div class="view">
        <form action="/puppies/1" class="button_to" method="get">
          <div><input class="rounded_button" type="submit" value="View Details"></div>
        </form>
      </div>
    </div>
  </div>
  <div class="puppy_list">
    <div class="list_line_even">
      <div class="image"><img alt="Ruby_sue" class="list_image" src="/assets/ruby_sue-6a9a75d0fc2d367acca04c13390c3f7a.jpg"></div>
      <div class="name">
        <h3>Ruby Sue</h3>
      </div>
      <div class="details">
        <h4>Pit Bull Terrier</h4>
        <h4>Female</h4>
      </div>
      <div class="view">
        <form action="/puppies/8" class="button_to" method="get">
          <div><input class="rounded_button" type="submit" value="View Details"></div>
        </form>
      </div>
    </div>
  </div>
  <br clear="all">
  <p></p>
  <div class="pagination"><span class="previous_page disabled">← Previous</span> <em class="current">1</em> <a rel="next" href="/agency/index?page=2">2</a> <a href="/agency/index?page=3">3</a> <a class="next_page" rel="next" href="/agency/index?page=2">Next →</a></div>
  <p></p>

</div>
2
  • What's the website? Commented Jan 27, 2021 at 13:09
  • puppies.herokuapp.com Commented Jan 27, 2021 at 16:30

1 Answer 1

1

You can find the info on 'Brook' based on the h3 tag

brook = driver.find_element_by_xpath("//h3[(text()= 'Brook')]")

Which will output <h3>Brook</h3>. You can get to the parent div by using xpath /... The parent div is <div class="name"><h3>Brook</h3></div>, so you want to move to the grandparent div by using /.. again.

brook = driver.find_element_by_xpath("//h3[(text()= 'Brook')]/../..")

Then, select your button by

click_button = brook.find_element_by_xpath("//input[@class='rounded_button']")
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.