Ответ 1
Сначала сохраните этот элемент в объекте, скажем, element
а затем напишите следующий код, чтобы щелкнуть по этому скрытому элементу:
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);
У меня есть сетка, которая отображает некоторые записи. Когда я нажимаю на запись и проверяю этот элемент, показано, что оно скрыто, но оно видно в сетке.
Мой 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();
Сначала сохраните этот элемент в объекте, скажем, element
а затем напишите следующий код, чтобы щелкнуть по этому скрытому элементу:
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);
У вас есть два подхода. Селен был специально написан для НЕ допускать взаимодействия со скрытыми элементами. Рациональное состоит в том, что если человек не может выполнить это действие, то и Селен не должен. Поэтому, чтобы выполнить щелчок через Selenium, вы должны выполнить действие, которое пользователь сделает, чтобы сделать эту кнопку видимой (например, мышь над событием, щелкните другой элемент и т.д.), А затем выполните щелчок, который будет виден.
Однако Selenium позволяет вам выполнять Javascript в контексте элемента, поэтому вы можете написать Javascript для выполнения события click, даже если он скрыт.
Мое предпочтение - всегда пытаться выполнять действия, чтобы сделать кнопку видимой
Если <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
overflow:hidden
не всегда означает, что элемент скрыт или отсутствует в DOM, это означает, что переполняющие символы, которые не вписываются в элемент, обрезаются. В основном это означает, что не показывать полосу прокрутки, даже если она должна отображаться, поэтому в вашем случае ссылка с текстом
Пластиковые спиральные привязки
можно было бы показать как "Пластиковый спир..." или аналогичный. Таким образом, возможно, что этот linkText действительно не существует.
Поэтому вы, вероятно, можете попробовать:
driver.findElement(By.partialLinkText("Plastic ")).click();
или xpath:
//a[contains(@title, \"Plastic Spiral Bind\")]
Я сделал это с помощью jQuery:
page.execute_script %Q{ $('#some_id').prop('checked', true) }
Используйте XPath ссылки, используя Selenium IDE, чтобы щелкнуть элемент:
driver.findelement(By.xpath("//a[contains(@title, \"Plastic Spiral Bind\")]")).click();