Mark K
Mark K

Reputation: 9378

Python, selenium chrome driver to fill form (element ids' changing)

a part of company internal webpage looks like this:

enter image description here

It's the first form of the webpage. I want to key in numbers into this form.

The problem is that, the element id is changing when the webpage is refreshed. So I tired driver.find_element_by_xpath and driver.find_element_by_css_selector, it's not catching the form everytime.

So I am thinking maybe locate the line of text "Customer No.", then move to its next element, could be a choice. but again, the element id of "Student No." is also changing.

Is there a way to catch the form by the text "Student No."? Or there's a better option? thank you.

part of HTML code as below:

<div class="labeledField">
        <div class="fieldLabel beanRequiredField">Student No.</div>
        <div class="field"><span id="id16">
    <div>
    <input type="text" class="inputField" value="" name="tabs:r:0:c:0:c:field:c:p:r:0:c:0:c:field:c:frag:component" id="id4e" customid="StudentId" autocomplete="off">
</div>
</span></div>
    </div>

Upvotes: 1

Views: 1451

Answers (3)

Chandu
Chandu

Reputation: 2129

driver.find_elements_by_class_name('inputField')[0].send_keys('Text')

It works!

Upvotes: 1

Zasados
Zasados

Reputation: 85

If you want to base on "Student No." string, then you can go with XPath selector:

//div[text()="Student No."]/../div[2]/span/div/input

So for Python it would be something like this:

input = driver.find_element(By.XPATH, '//div[text()="Student No."]/../div[2]/span/div/input')

Upvotes: 1

Jeppe Spanggaard
Jeppe Spanggaard

Reputation: 97

Maybe this will solve your problem:

WebDriverWait wait = new WebDriverWait(driver, 15); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@id='text3']")));

Upvotes: 1

Related Questions