Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Взаимодействие со списком элементов через driver.find_elements_by_class_name

windows
webdriver
selenium
python
Теги: #<Tag:0x00007fedbbe21ea8> #<Tag:0x00007fedbbe21cf0> #<Tag:0x00007fedbbe21b60> #<Tag:0x00007fedbbe219a8>

(Acamori) #1

Возможно ли взаимодействие со списком элементов полученных через функцию driver.find_elements_by_class_name ?

Элемент выглядит так:

<button type="button" class="btn pull-right" onclick="qbo3.getObject(this).invokeHtml('RenderEdit', {'ID': '14388359' });">Edit</button>

Метод поиска через xpath не всегда походит, так как он у элемента каждый раз новый. Поэтому пытаюсь получить список элементов но как дальше с ними взаимодействовать - мануала не нашел.

Вот список который я получаю:

driver.find_elements_by_class_name('pull-right')
[<selenium.webdriver.remote.webelement.WebElement (session="7d46d6c2bf22d65f7ff48ef5dbec759b", element="0.5855628533927169-7")>, <selenium.webdriver.remote.webelement.WebElement (session="7d46d6c2bf22d65f7ff48ef5dbec759b", element="0.5855628533927169-8")>, <selenium.webdriver.remote.webelement.WebElement (session="7d46d6c2bf22d65f7ff48ef5dbec759b", element="0.5855628533927169-9")>, <selenium.webdriver.remote.webelement.WebElement (session="7d46d6c2bf22d65f7ff48ef5dbec759b", element="0.5855628533927169-10")>, <selenium.webdriver.remote.webelement.WebElement (session="7d46d6c2bf22d65f7ff48ef5dbec759b", element="0.5855628533927169-11")>, <selenium.webdriver.remote.webelement.WebElement (session="7d46d6c2bf22d65f7ff48ef5dbec759b", element="0.5855628533927169-12")>, <selenium.webdriver.remote.webelement.WebElement (session="7d46d6c2bf22d65f7ff48ef5dbec759b", element="0.5855628533927169-13")>, <selenium.webdriver.remote.webelement.WebElement (session="7d46d6c2bf22d65f7ff48ef5dbec759b", element="0.5855628533927169-14")>, <selenium.webdriver.remote.webelement.WebElement (session="7d46d6c2bf22d65f7ff48ef5dbec759b", element="0.5855628533927169-15")>]

Вот как выглядит родительский элемент. Мне надо добраться до кнопки Edit и нажать ее.

<div class="tab-pane" id="18155444" style="display: block; overflow: visible;">
                <div id="18155444Panel" data-behavior="ObjectBind" data-objectbind-options="{ 'class': 'qbo3.ImportFormObject', 'remember': false, 'render': false, 'data': {'ID': '14388359' }, 'method': 'RenderSelect', 'cacheKey': 'ImportFormID-14388359', 'listen': [] }">
<style xmlns:format="urn:qbo3-formatting" xmlns:data="urn:qbo3-data">
			.help, .help-inline {font-size: .75em; font-style: italic;}
		</style>
<form class="form-horizontal grid" xmlns:format="urn:qbo3-formatting" xmlns:data="urn:qbo3-data">
  <legend xmlns:security="urn:qbo3-security">Neighborhood<button type="button" class="btn pull-right" onclick="qbo3.getObject(this).invokeHtml('RenderEdit', {'ID': '14388359' });">Edit</button><span class="pull-right"><a onclick="qbo3.getObject(this).popup('Mortgage/Valuation.ashx/HelpTextSelect?ID=17');" title="Click for help"><i class="icon-question-sign"></i></a><i class="icon-empty"></i></span></legend>
  <div class="row-fluid">
    <div class="span6">
      <div class="control-group"><label>Vandalism Present</label><div class="controls"><span class="span2"></span></div>
      </div>
      <div class="control-group"><label>Primary Occupancy</label><div class="controls"><span class="span2"></span></div>
      </div>
      <div class="control-group"><label>Neighborhood Low</label><div class="controls"><span class="span2"></span><span class="help-inline">Low neighborhood value</span></div>
      </div>
      <div class="control-group"><label>Neighborhood High</label><div class="controls"><span class="span2"></span><span class="help-inline">High neighborhood value</span></div>
      </div>
      <div class="control-group"><label>Predominant Value</label><div class="controls"><span class="span2"></span></div>
      </div>
      <div class="control-group"><label>Potential Rent</label><div class="controls"><span class="span2"></span><span class="help-inline">Monthly subject rent potential</span></div>
      </div>
      <div class="control-group"><label>Competition</label><div class="controls"><span class="span2"></span><span class="help-inline">Number of homes in direct competition</span></div>
      </div>
      <div class="control-group"><label>Similar Sold</label><div class="controls"><span class="span2"></span><span class="help-inline">Within the last six months</span></div>
      </div>
    </div>
    <div class="span6">
      <div class="control-group"><label>Past 12 Months</label><div class="controls"><span class="span2"></span><span class="help-inline">Change in values over the past 12 months</span></div>
      </div>
      <div class="control-group"><label>Housing Supply</label><div class="controls"><span class="span2"></span><span class="help-inline">Housing supply of similar homes</span></div>
      </div>
      <div class="control-group"><label>Marketing Time</label><div class="controls"><span class="span2"></span><span class="help-inline">Typical marketing time</span></div>
      </div>
      <div class="control-group"><label>Density</label><div class="controls"><span class="span2"></span></div>
      </div>
      <div class="control-group"><label>All Financing Available</label><div class="controls"><span class="span2"></span><span class="help-inline">Are all types of financing available</span></div>
      </div>
      <div class="control-group"><label>Explain Financing</label><div class="controls"><span class="span2"></span></div>
      </div>
      <div class="control-group"><label>Neighborhood Comments</label><div class="controls"><span class="span2"></span></div>
      </div>
    </div>
  </div>
</form></div><div class="spinner" id="spinner-j78odqd4" style="display: none; width: 0px; height: 0px; position: absolute; left: -20px; top: -1677px; opacity: 0;"><div class="spinner-content" style="position: absolute; left: 0px; top: 0px;"><div class="spinner-img"></div></div></div>
              </div>

#2

Не могу понять, какая разница на чём написан сайт?
ЛОктаор может быть типа //button[text()=“Edit”]


(Acamori) #3

“Но так как” - зря добавил наверное. Удалю :slight_smile:

А как строка будет полностью выглядеть с этим локатором в питоне ?

P.s. способ добраться до кнопки - нашел, но он не слишком изящен, интересно узнать иные способы.


#4

На питоне не знаю, на джаве : driver.findElement(By.xpath("//button[text()=“Edit”]");
Похоже что на питоне будет так
driver.find_element(By.XPATH, “//button[text()=“Edit”]”)


(Acamori) #5

Работает, спасибо большое. Не раз просматривал мануал, и не увидел этого прям на видном месте =\