Рациональное нажатие на кнопку - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь просмотреть каждый элемент DIV, записать некоторые данные и, наконец, нажать «Отправить». Однако я не уверен, почему, но запись значений и нажатие кнопки отправки всегда выполняется для одного и того же элемента.

например:

<div id="random_id" class="section">
  Last name:<br>
  <input type="text" id="lastname"><br><br>
  <input type="submit" value="Submit" id="submit">
</div>

 <div id="random_id" class="section">
    Last name:<br>
    <input type="text" id="lastname"><br><br>
    <input type="submit" value="Submit" id="submit">
</div>

<div id="random_id" class="section">
    Last name:<br>
    <input type="text" id="lastname"><br><br>
    <input type="submit" value="Submit" id="submit">
</div>

<div id="random_id" class="section">
    Last name:<br>
    <input type="text" id="lastname"><br><br>
    <input type="submit" value="Submit" id="submit">
</div>

Я написал следующий скрипт на python, чтобы зациклить все разделы, заполнить данные внутри и нажать «Отправить».

elements = driver.find_elements_by_xpath("//div[@class='section']")
for element in elements:
    element.find_element_by_xpath("//div[@id='section']").send_keys("hello world")
    element.find_element_by_xpath("//div[@id='submit']").click()

Когда я запускаю скрипт, только первый элемент заполняется и щелкается 3 раза.

1 Ответ

0 голосов
/ 20 марта 2019

Заполняется только первый элемент, потому что когда вы используете element.child_element с xpath в Selenium, вы должны добавить ./, child::tag или использовать descendant::tag, чтобы сделать его относительно родителя, в противном случае это абсолют. Вы можете найти здесь .

element.find_element_by_xpath(".//input[@id='lastname']")
element.find_element_by_xpath("child::input[@id='lastname']")
element.find_element_by_xpath("descendant::input[@id='lastname']")

Как сделать с xpath:

elements = driver.find_elements_by_xpath("//div[@class='section']")
for element in elements:
    element.find_element_by_xpath(".//input[@id='lastname']").send_keys("hello world")
    element.find_element_by_xpath(".//input[@id='submit']").click()

Как сделать с помощью селектора CSS:

elements = driver.find_elements_by_css_selector(".section")
for element in elements:
    element.find_element_by_css_selector("#lastname").send_keys("hello world")
    element.find_element_by_css_selector("#submit").click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...