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

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

Мой HTML:

<a href="#" onclick="location.href='http://192.168.1.6/eprint_prod_3.8/settings/othercost_add.aspx?type=edit&id=805'; return false;" 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();

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

Если <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

Ответ 4

overflow:hidden 

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

Пластиковые спиральные привязки

можно было бы показать как "Пластиковый спир..." или аналогичный. Таким образом, возможно, что этот linkText действительно не существует.

Поэтому вы, вероятно, можете попробовать:

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

или xpath:

//a[contains(@title, \"Plastic Spiral Bind\")]

Ответ 5

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

page.execute_script %Q{ $('#some_id').prop('checked', true) }

Ответ 6

Используйте XPath ссылки, используя Selenium IDE, чтобы щелкнуть элемент:

driver.findelement(By.xpath("//a[contains(@title, \"Plastic Spiral Bind\")]")).click();