2

I am trying to select an input box in a drop down menu. The input box itself, however, appears to be dynamic. I've looked through similar posts, but they seem to be issue specific. I've had this problem a few times now with dynamic elements, and I'm hoping to understand a general approach to working with dynamic elements.

Here are the details of the element I seek to select:

<input class="lui-search__input ng-pristine ng-valid ng-empty ng-valid-maxlength ng-touched" maxlength="5000" q-placeholder="Object.Listbox.Search" ng-model="query" ng-disabled="disabled" autocomplete="" spellcheck="false" ng-trim="false" type="text" qva-blur="blurred()" qva-focus="autoFocus" qv-escape="escape($event)" qv-enter="enter($event)" placeholder="Search in listbox" aria-invalid="false" xpath="1">

(if this isn't helpful information, please let me know and I will update).

The relative xpath changes:

//body/div[8]/div[1]/div[1]/div[1]/ng-transclude[1]/div[1]/div[3]/div[1]/article[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/input[1]

in one instance

Another instance of the relative xpath:

//body/div[7]/div[1]/div[1]/div[1]/ng-transclude[1]/div[1]/div[3]/div[1]/article[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/input[1]

I have tried to select by class and css selector with no luck. I'd really like to understand how to approach this specific issue, and also a general idea of where in an element I should play around with for future instances of dynamic elements.

Thanks!

(If the element details I provided are not helpful, the element can also be accessed with the below code:)

driver.get("https://bi.prozorro.org/sense/app/fba3f2f2-cf55-40a0-a79f-b74f5ce947c2/sheet/NFTrm/state/analysis")

driver.find_element_by_xpath("//thead/tr[1]/th[2]").click()

#the input box I am attempting to select to no avail:
while True:
        try:
            WebDriverWait(driver, 25).until(EC.presence_of_element_located((By.XPATH, "//body/div[7]/div[1]/div[1]/div[1]/ng-transclude[1]/div[1]/div[3]/div[1]/article[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/input[1]")))
            break
        except TimeoutException:
            print("Loading took too much time!")

2 Answers 2

1
+50

The WebElement is an Angular element. So ideally to click on the element you need to induce WebDriverWait for the element_to_be_clickable() and you can use either of the following Locator Strategies:

  • Using XPATH:

    driver.get('https://bi.prozorro.org/sense/app/fba3f2f2-cf55-40a0-a79f-b74f5ce947c2/sheet/NFTrm/state/analysis')
    WebDriverWait(driver, 60).until(EC.element_to_be_clickable((By.XPATH, "//th[@tid='st.header']//span[@title='Учасник']//following::th[@tid='st.header.search']"))).click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='Search in listbox']"))).click()
    
  • Note: You have to add the following imports :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Browser Snapshot:

prozorro

Sign up to request clarification or add additional context in comments.

5 Comments

Thank you for the reply! I receive a Timeout exception error upon running the second command. I put the command in a while True, try, except loop, except the element for the search box never seems to find the element
Ah! I got it to work with this xpath //input[@placeholder='Search in listbox']. Not sure why this one worked instead of the one you provided though, do you know why?
@YuNa Targetting the placeholder attribute seems to be a better option. Updated the answer.
Great, thanks! Do you know why that is the case?
@YuNa At this point I must admit automating PowerBI based web applications posses the toughest challenge. The code needs to be fine tuned optimally which would require some more R&D.
1

You can use one of it's attributes to find it.

XPATH:

//input[@placeholder='Search in listbox']

4 Comments

Ah interesting idea. When I try this though, I receive error message Message: no such element: Unable to locate element. Are there some attributes that are better than others?
Just want to followup on this!
Not really as long as it's unique to the element.
This is helpful to know, but still struggling with the error that the element can't be located

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.