公司产品是一个window客户端,打开软件会有一个登录界面,登录之后跳转到另外一个主界面。
在用winappdriver进行自动化测试时,发现跳转之后无法定位到元素。
在网上查找资料时,发现有人提到switch_to.window这个函数。测试之后发现无用。
通过inspect.exe查看发现跳转前后窗体句柄发生了变化。
我猜测:switch_to.window应该只适用于同一个句柄下不同窗体之间的切换,对于句柄发生变化的窗体无效。
既然句柄发生了变化,那么就创建一个新的session,创建方法如下:
这里需要用到win32,先自行安装pywin32.。
# 获取跳转之后窗体的句柄,classname和windowname可以通过inspect工具获取到
self.handle = win32gui.FindWindow("classname", "windowname")
# 创建新的session,用到appTopLevelWindow这个属性
desired_caps = dict()
desired_caps["appTopLevelWindow"] = str(hex(self.handle))
desired_caps["platformName"] = "windows"
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723',
desired_capabilities=desired_caps)
接下来就可以用新的session去定位元素了。