t.me/atinfo_chat Telegram группа по автоматизации тестирования

Milonic меню и подменю


(Vitalik) #1

Как нажимать на меню и подменю в Milonic в котором отсуствует keystrokes.js (с помощью Selenium)?

Особенно проблематично подменю, которое не открывается даже с помощью SendKeys.ENTER/RIGHTARROW/SPACE etc (стоя на его меню)

(использование keystrokes.js который идет со стандартным Milonic исключается, к сожалению)

 

Может кто решил эту проблему - поскажите


(Mykhailo Poliarush) #2

честно говоря не пробовал автоматизировать еще такой dhtml.

а есть страница на которой можно попробовать код?


(Vitalik) #3

К сожалению, сайт внутренний.

в принципе, подошел бы любой пример отсюда: http://www.milonic.com/menu.php . Единственная загвоздка keystrokes.js - в этих примерах активирован, а у нас - нет...


По этому поводу один мой знакомый любит говорить: О сколько нам работы нудной готовит ум начальства скудный :-D

 

Самое интересное, что товарищи из Милоника понятия не имеют что такое Селениум и под каким соусом его подают...


(Mykhailo Poliarush) #4

ну например, вот такой вот код работает у меня 

 

from selenium import webdriver

d = webdriver.Firefox()

d.get(“http://www.milonic.com/menusample86.php”)

menu = d.find_element_by_id(“lnk146”).click()

item = d.find_element_by_xpath("(//*[@id=‘menu15’]//a)[2]").click()


(Vitalik) #5

Дело в следующем:
Элемент menu15 появляется и может быть считан только после того как мышь побывала над объектом menu14 и подменю открылось один раз. С этого момента - оно доступно Селениуму.

А открывается подменю с Селениумом только если страница подгружает keystrokes.js (без Селениума проблемы нет). А у мы keystrokes.js не подгружаем, вот и получается что menu15 никогда не появляется.

(т.е. то есть строка d.find_element_by_id("lnk146").click() в твоем коде не срабатывает)


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

 

кстати, все эти чудеса происходят в Эксплорере, может это тоже играет роль


(Mykhailo Poliarush) #6

конечно браузер играет роль потому как отработка javascript-a происходить по разному.

тогда можно попробовать взаимодействовать с помощью javascript

т.е. фактически нажимать на нужные элементы через javascript


(Vitalik) #7

А javascript подвязанный к каждой строке в меню таков: javascript:void(0);

...


(Vitalik) #8

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

Алгоритм засерона в каментах таков :
1. читаешь что написано в //span[@class='field-prefix']
2. убираешь пробелы в стоке, парсишь по плюсу
3. складываешь
4. кидаешь результат в //input[@id='edit-captcha-response']
5. тыцькаешь на //input[@id='edit-submit']

хороший сайт, нужный - жаль будет если какой-то первонах начнет тут в каментах срать нипадеццге....


(Mykhailo Poliarush) #9

то, что в каждом элементе указан javascript это дело такое, важно понимать, что с помощью javascript вы можете нажать на какой-то элемент или кнопку.

ну например вот так

document.getElementById('theSubmitButton').click();

(Mykhailo Poliarush) #10

согласен, можно легко обойти, но это больше для людей нежели для машин.

потому что, я еще на уровне регистрации фильтрую всяких ботов, причем сейчас переключил в ручной режим, а то всякие капчи все равно пропускают

а на счет сайта, спасибо, присоединяйтесь, чтобы сделать его еще лучше


(Vitalik) #11

А это идея! Попробую


(Vitalik) #12

Попробовал - не идет....
 


(Mykhailo Poliarush) #13

тут без ковыряний и разбирательств не получиться, надо иметь страницу, что на нее посмотреть
а так тяжело подсказать, какой вариант может заработать.