it-roy-ru.com

Как нажать на скрытый элемент в Selenium WebDriver?

У меня есть сетка, которая отображает некоторые записи. Когда я нажимаю на запись и проверяю этот элемент, он показывает, что он скрыт, но он виден в сетке. 

Мой HTML это:

<a href="http://192.168.1.6/eprint_prod_3.8/settings/othercost_add.aspx?type=edit&id=805" title="Plastic Spiral Bind"
<div style="float: left; width: 99%; overflow: hidden; height: 15px; overflow: hidden"> Plastic Spiral Bind </div>
</a>

Приведенный выше код скрыт при проверке, но он виден в сетке.

Селен код:

driver.findElement(By.partialLinkText("Plastic Spiral Bind")).click();
15
Santhosh.S

Сначала сохраните этот элемент в объекте, скажем, element, а затем напишите следующий код, чтобы щелкнуть этот скрытый элемент:

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);
24
TDHM

У вас есть два подхода. Селен был специально написан, чтобы не допустить взаимодействия со скрытыми элементами. Рациональным является то, что если человек не может выполнить это действие, то и Селен не должен. Поэтому, чтобы выполнить щелчок через Selenium, вы должны выполнить действие, которое пользователь должен сделать, чтобы сделать эту кнопку видимой (например, навести курсор мыши на событие, щелкнуть другой элемент и т.д.), А затем выполнить щелчок, когда он станет видимым.

Однако Selenium позволяет вам выполнять Javascript в контексте элемента, поэтому вы можете написать Javascript для выполнения события click, даже если оно скрыто.

Я предпочитаю всегда пытаться выполнять действия, чтобы сделать кнопку видимой 

12
Robbie Wareham

Я сделал это с помощью jQuery:

page.execute_script %Q{ $('#some_id').prop('checked', true) }
0
aarkerio
overflow:hidden 

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

Пластиковая спираль

может быть показано как «Пластиковый Spir ...» или подобное. Поэтому возможно, что этот linkText действительно не существует. 

Так что вы можете попробовать:

driver.findElement(By.partialLinkText("Plastic ")).click();

или xpath:

//a[contains(@title, \"Plastic Spiral Bind\")]
0
Erki M.

Если <div> имеет идентификатор или имя, то вы можете использовать find_element_by_id или find_element_by_name

Вы также можете попробовать с именем класса, CSS и XPath

find_element_by_class_name
find_element_by_css_selector
find_element_by_xpath
0
user2118784