Я использую роботизированную среду и библиотеку селена для автоматизации тестирования сайта.
Мне нужно щелкнуть меню, элементы которых находятся под некоторым кадром, тесты выглядят так, как показано ниже:
# switch to default content first
unselect frame
# switch to level one menu's frame which id is head and click menu1a which id is menu1a
select frame head
click menu1a
# switch to level two menu's frame which id is menuFrame and click menu2a which id is menu2a
unselect frame
select frame menuFrame
click menu2a
# do some testing
…
# then I need to do some other testing in another menu
# switch to default content first
unselect frame
# switch to level one menu's frame which id is head and click menu1b which id is menu1b
select frame head
click menu1b
unselect frame
# switch to level two menu's frame which id is menuFrame and click menu2b which id is menu2b
select frame menuFrame
click menu2b
# do some other testing
…
При выполнении нажмите кнопку menu2b, селен выдает исключение:
Элемент с локатором menu2b не найден.
Если вручную щелкнуть menu1a и menu1b, меню уровня два (menu2a, menu2b) динамически изменяются внутри элемента div и под одним и тем же фреймом, который называется menuFrame, и если я нахожу различные меню уровня два в одном и том же меню уровня один, это все в порядке, как показано ниже:
unselect frame
select frame head
click menu1a
unselect frame
select frame menuFrame
click menu2a
# do some testing
…
unselect frame
select frame head
click menu1a
unselect frame
select frame menuFrame
click menu2c
# do some other testing
Я также установил скорость селена в 1 секунду, которая будет ждать 1 с после выполнения каждой команды, все еще вызывает исключение.
Обновление:
Когда я нажимаю F12, чтобы найти элемент menu2b, html выглядит так:
<li id="22" onclick="showStation(1012);"><a class="innerA" target="mainFrame" href="test.jsp">menu2b</a></li>
но, когда я печатаю источник страницы при исполнении, html будет:
<li id="50" onclick="showStation(1012);"><a class="innerA" target="mainFrame" href="test.jsp">menu2b</a></li>
ИД элемента отличается ...