Как открыть новое окно с помощью Robot framework, selenium?



На моей тестируемой странице есть ссылка, которая по умолчанию открывается в новой вкладке. Мне нужно открыть ссылку и проверить некоторые значения на только что открытой странице.
Как я обнаружил, selenium не поддерживает работу с вкладками, поэтому я пытаюсь открыть ссылку в новом окне, но она по-прежнему не работает..
Я реализовал функцию python для удержания клавиши SHIFT (я уже делал это раньше для CTRL, и она работает), а затем вызвал функцию "click", но ссылка все еще открывается в новой вкладке



from robot.libraries.BuiltIn import BuiltIn
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

class CustomSeleniumLibrary(object):
def __init__(self):
self.driver = None
self.library = None
self.ac = None

def get_library_instance(self):
if self.library is None:
self.library = BuiltIn().get_library_instance('ExtendedSelenium2Library')
return self.library

def get_action_chain(self):
if self.ac is None:
self.ac = ActionChains(self.get_library_instance()._current_browser())
return self.ac

def hold_shift(self):
actionChain = self.get_action_chain()
actionChain.key_down(Keys.SHIFT)
actionChain.perform()


Робот ключевое слово -



Open project detail
wait until element is visible ${LINK_TO_PROJECT}
${project}= get text ${LINK_TO_PROJECT}
hold shift
click element ${LINK_TO_PROJECT}
#sleep 2s
#release shift
element should contain //h3 Project Details: ${project}


Я перепробовал много вариантов со спящими, отпуская ключ и т. д. но он никогда не открывает ссылку в новом окне. Я также попытался проверить данные во вновь открытой вкладке (не пытаясь открыть в новом окне), но он всегда перенаправляется в исходную вкладку очень быстро, так что DOM на новой вкладке еще не загружен.. Спасибо за любое предложение!

676   1  

1 ответ:

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

current = driver.current_window_handle
driver.find_element_by_css_selector('a').click() # use own selector
new_tab = [tab for tab in driver.window_handles if tab != current][0]
driver.switch_to.window(new_tab)
# do some actions
driver.close()
driver.switch_to.window(current)

Также вы можете сделать небольшой хак (не рекомендуется, но...) чтобы избежать обработки новых вкладок и принудительно открыть ссылку в текущей вкладке:

link = driver.find_element_by_css_selector('a')
driver.execute_script('arguments[0].target="_self";', link)

Comments

    Ничего не найдено.