【发布时间】:2018-07-27 07:41:43
【问题描述】:
使用 Codeception 测试框架和 Selenium 2 模块来测试一个网站,我最终找到了一个超链接,该超链接打开了一个没有名称的新窗口。因此,switchToWindow() 函数将无法工作,因为它正在尝试切换到父窗口(我目前正在打开)。由于无法切换到新窗口,我无法对其进行任何测试。
<a class="external" target="_blank" href="http://mylocalurl/the/page/im/opening">
View Live
</a>
同时使用 Chrome 和 Firefox 调试工具,我可以确认新窗口没有名称,我不能给它一个名称,因为我无法编辑我正在处理的 HTML 页面。理想情况下,我会更改 HTML 以使用 javascript onclick="window.open('http://mylocalurl/the/page/im/opening', 'myPopupWindow') 但在我的情况下这是不可能的。
我在 Selenium 论坛上环顾四周,没有任何明确的方法来解决这个问题,而且 Codeception 似乎没有太多的功能。
【问题讨论】:
-
Codeception 中有
getWindowNames()类型命令吗?抱歉,我似乎找不到文档。 -
不,没有,文档几乎不存在(尽管随着时间的推移而改进),但是大多数功能都是 Selenium 2 方法的扩展。我相信我可以执行 some Selenium 2 方法,但我不知道哪些方法和多少。文档:codeception.com/docs/modules/Selenium2
-
哇,这是真正的泡菜。我认为
executeInSelenium将是您最好的选择。查看链接到 PHP webdriver 绑定,它确实可以访问getWindowHandle()和getWindowHandles()方法。因此,我只能冒险在您打开新窗口之前getWindowHandle(),之后getWindowHandles()。这意味着您知道这两个名称,因此您应该能够从getWindowHandles()返回的数组中提取“新窗口”名称。希望它能给您一些关于下一步的想法,因为不幸的是我无法理解如何编写 Codeception 示例。 -
我已经收到提醒并且正要尝试的事情:
->executeInSelenium(function (\Webdriver\Session $webdriver) { $handles=$webdriver->window_handles(); $last_window = end($handles); $webdriver->focusWindow($last_window); });我猜这就是您的建议。 -
据我所见,这非常符合我的期望。祝你好运,希望它有效。
标签: codeception