Selenium / Python - Имя класса с пробелами, не способными к локальному элементу - PullRequest
0 голосов
/ 07 ноября 2018

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

Ниже приведен HTML-код для поля «Описание», который я пытаюсь найти.

<input size="15" maxlength="255" class="acitem description s-description ui-autocomplete-input" spinner="/assets/spinner-48c6e73f2bbe9ea753f7f8e5410541a8138d19d657ddd532b2765335ed3d62bf.gif" auto_complete="true" data-autocomplete-url="/items/auto_complete" data-autocomplete-renderer="item_autocomplete_renderer" data-autocomplete-delay="250" type="text" name="invoice[invoice_lines_attributes][68345][description]" id="invoice_invoice_lines_attributes_68345_description" autocomplete="off">

Коды, которые я использую до сих пор, потерпели неудачу.

test_1 = driver.find_element_by_css_selector('.acitem.description.s-description.ui-autocomplete-input')
test_1.send_keys("HELLO WORLD")

test_2 = driver.find_element_by_css_selector("input[class='acitem description s-description ui-autocomplete-input']")
test_2.send_keys("HELLO WORLD")

test_3 = Select(driver.find_element_by_xpath("//*[@class='acitem description s-description ui-autocomplete-input']"))
test_3.send_keys("HELLO WORLD")

Я неправильно понял код или есть обходной путь с именем класса, в котором есть пробелы? Спасибо.

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Я почти во всех случаях, все элементы из DOM могут быть доступны через XPATH. В вашем случае я бы сказал следующее:

element = driver.find_element_by_xpath("//input[@id='acitem description s-description ui-autocomplete-input']")
0 голосов
/ 14 ноября 2018

Спасибо за вашу помощь. Я решил с помощью start-with и содержит. Ниже мой код.

invc_desc =driver.find_element_by_xpath("//input[starts-with(@class,'acitem') and contains(@class,'s-description')]")
invc_desc.clear()
invc_desc.send_keys("HELLO WORLD")
0 голосов
/ 07 ноября 2018

Попробуйте с xpath

//input[starts-with(@id,'invoice_invoice_lines_attributes_')]
...