如何使用机器人框架硒打开新窗口?

Posted

技术标签:

【中文标题】如何使用机器人框架硒打开新窗口?【英文标题】:How to open new window using robot framework, selenium? 【发布时间】:2017-08-12 00:44:26 【问题描述】:

我的测试页面上有一个链接,默认情况下会在新标签页中打开。我需要打开链接并验证新打开的页面上的一些值。 因为我发现 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 尚未加载.. 感谢您的任何建议!

【问题讨论】:

为什么你认为selenium 不支持使用标签? ***.com/questions/37088589/… 嗯,我在几个线程中找到了它......我也找到了一些解决方案,用户在代码中手动传递链接,但我不知道链接中的地址是什么......但是它可能会被视为 href 的值,然后将其作为变量传递...将检查 【参考方案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)

【讨论】:

谢谢,这个解决方案很好用 :) 刚才我还需要打开新的空标签(不要点击任何链接,而只是打开它进行复制粘贴操作),所以我调用了包含这个 self 的函数.get_action_chain().key_down(Keys.CONTROL).key_down('t').perform() 来自机器人,没有任何反应...... :(我尝试了许多变体,使用 send_keys,key_down 和 send_keys 的组合,但仍然没有标签已打开...请问有什么想法吗? 使用selenium,您可以打开新标签,例如driver.execute_script("window.open('http://google.com')")。如果不传递URL 作为参数,则只会打开空标签 您好,请问您知道如何关闭新标签页吗?当我切换到新选项卡时,我尝试了 close(),但它关闭了整个窗口...我找不到任何可行的解决方案:( 嗯...driver.close() 应该这样做。如果它不起作用,您也可以尝试driver.exexcute_script('window.close();') 在这两种情况下,它都会关闭整个窗口,而不仅仅是选项卡:/ 我现在在测试中有一些其他解决方法,但这很奇怪......无论如何,非常感谢! :)

以上是关于如何使用机器人框架硒打开新窗口?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用扩展和硒打开一个新的标签页?

如何在 Selenium for Python 中切换到新窗口?

单击硒作为双击

如何在C#中使用硒Webdriver进行断言?

如何在同一台机器上运行多个硒测试套件

如何从竹变量替换硒框架属性文件值?