【问题标题】:How to switch to window or tab in splinter webdriver python?如何在 splinter webdriver python 中切换到窗口或选项卡?
【发布时间】:2018-07-30 17:09:49
【问题描述】:

我是 python 和 splinter 的新手。我阅读了关于 splinter 的文档,但它没有提到 selenium 库中关于 switch_to 的任何内容。

当我运行此代码时出现错误。

  from splinter import Browser

  browser = Browser("firefox")
  browser.visit('http://google.com')
  window1 = browser.windows[0] #google
  browser.execute_script("window.open('https://www.amazon.com/');")
  window2 = window1.next #amazon active window
  browser.driver.switch_to.window(window1) #switch back to google

文档-http://splinter.readthedocs.io/en/latest/browser.html

错误:

Traceback(最近一次调用最后一次): 文件“/Users/Splinter/switch_tabs.py”,第 13 行,在 browser.driver.switch_to.window(window1) 文件 >“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/switch_to.py”,第 112 行,在窗口中 self._w3c_window(window_name) _w3c_window 中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/switch_to.py”,第 123 行 发送句柄(窗口名称) 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/switch_to.py”,第 119 行,在 send_handle self._driver.execute(Command.SWITCH_TO_WINDOW, {'handle': h}) 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py”,第310行,在执行 响应 = self.command_executor.execute(driver_command, params) 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/remote_connection.py”,第464行,在执行 数据 = utils.dump_json(参数) 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/selenium/webdriver/remote/utils.py”,第 34 行,在 dump_json 返回 json.dumps(json_struct) 转储中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py”,第 244 行 返回 _default_encoder.encode(obj) 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py”,第 207 行,编码 块 = self.iterencode(o, _one_shot=True) 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py”,第 270 行,在 iterencode 返回 _iterencode(o, 0) 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py”,第 184 行,默认 raise TypeError(repr(o) + "不是 JSON 可序列化") 类型错误:https://www.google.com.ph/?gfe_rd=cr&dcr=0&ei=iiSMWoGqDO2tX4q9gbgP&gws_rd=ssl> 不是 JSON 可序列化的 [在 93.137 秒内完成] 短绒 严重性提供程序描述行

欢迎任何想法。谢谢!

【问题讨论】:

  • 您遇到的错误是什么?请添加问题的完整回溯。
  • @Norrius 添加了它。 :)
  • 在另一个答案中,建议运行multiple drivers/browsers 以使用多个选项卡进行测试。

标签: python selenium selenium-webdriver web-testing splinter


【解决方案1】:

试试这个(它的工作):

# Get parent window
 parent_window = self.browser.driver.current_window_handle
# Open new page in child window
self.browser.driver.execute_script("window.open('http://google.com')")
 # Get list of all windows currently opened (parent + child)
 all_windows = self.browser.driver.window_handles
 # Get child window
 child_window = [window for window in all_windows if window != parent_window][0]
 # Switch to child window
 self.browser.driver.switch_to.window(child_window)
 # Close child window
 self.browser.driver.close()
 # Return to parent window
 self.browser.driver.switch_to.window(parent_window)

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 2021-06-12
    • 2018-12-15
    • 2012-11-28
    • 1970-01-01
    • 2016-11-14
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多