Google chrome 使用Watir在Chrome中打开新选项卡会导致使用打开的选项卡出现问题
简短版本:Chrome中的新标签阻止了旧标签的使用,修复了这一问题,这意味着在人类检查PDF之前,打开的带有PDF的标签会被重新使用 长版本: 最初它是这样工作的:Google chrome 使用Watir在Chrome中打开新选项卡会导致使用打开的选项卡出现问题,google-chrome,pdf,tabs,watir-webdriver,selenium-chromedriver,Google Chrome,Pdf,Tabs,Watir Webdriver,Selenium Chromedriver,简短版本:Chrome中的新标签阻止了旧标签的使用,修复了这一问题,这意味着在人类检查PDF之前,打开的带有PDF的标签会被重新使用 长版本: 最初它是这样工作的: 打开应用程序主页的新Chrome窗口(选项卡1) 2.[执行流程A,然后]单击按钮,将打开一个新选项卡(选项卡2),其中包含PDF A 返回tab#1[执行流程B,然后]单击按钮,将打开一个新选项卡(tab#3),其中包含PDF B 返回tab#1[执行流程C,然后]单击按钮,打开一个新选项卡(tab#4),下载Word文档C文档
currenturl = "stackoverflow.placeholder.com/works"
# print Inventory Report .PDF (document 1)
b.goto currenturl
b.div(:id, 'page').a(:text, 'Inventory Report').click
sleep 1
b.div(:id, 'printInventoryReportModal').a(:text, 'A4').click
b.link(:id => "submitBTNprint-inventory-report").fire_event "onclick"
# print General List .PDF (document 2)
b.goto [main page URL]
b.div(:id, 'page').a(:text, 'General List').click
sleep 1
b.div(:id, 'printGeneralInventoryListModal').a(:text, 'A4').click
b.link(:id => "submitBTNprint-general-list").fire_event "onclick"
# print General List .DOC (document 3)
b.goto [main page URL]
b.div(:id, 'page').a(:text, 'General List').click
sleep 1
b.div(:id, 'printGeneralInventoryListModal').a(:text, '.DOC').click
b.div(:id, 'printGeneralInventoryListModal').a(:text, 'A4').click
b.link(:id => "submitBTNprint-general-list").fire_event "onclick"
大多数情况下,browser.window函数似乎没有按预期的方式工作,或者您没有正确使用它。由于您的问题目前很少涉及您如何尝试更改窗口(选项卡)的示例,因此很难判断您可能做错了什么 首先,我将使用IRB进行一些探索和故障排除 进入IRB,然后使用
require 'watir-webdriver'
b = Watir::Browser.new :chrome
现在,手动导航打开的浏览器窗口,使其处于打开多个选项卡的状态
现在,在IRB中尝试类似的方法,看看是否可以让它吐出窗口标题
b.windows.each {|window| puts window.title}
如果标题不同,那么您应该能够使用它来设置要使用的窗口。如果它们没有区别,那么您需要查看其他属性,看看是否有一种简单的方法来确定您想要哪个窗口。(或者只使用:index)尝试下面的代码
睡眠(2)
例如,如果父窗口索引为
0
,而子窗口索引为1
两件事,那么将其简化为调用常用帮助器方法的代码部分之一,然后还包括这些方法的代码可能会有所帮助。其次,我要指出的是,对于诸如print Inventory Report one之类的项目,我从未看到它被设置或使用过“currenturl”,但它正在将该变量(即变量中的值)传递给page_status和section_results方法。如果不提供来自helper方法的代码,很难获得完整的信息,很可能你会得到零答案。另外,对于打开的其他选项卡,是否可以使用一些有用的标题来允许.window方法正确定位所需的选项卡?这比使用.last和.first更不随意。要找到要使用Chuck的选项卡,首先:感谢您的输入。即使没有常用的helper方法,问题仍然存在,因此我将它们从上述代码中删除。为了完整起见,我为“currenturl”添加了一个占位符。至于标签的命名,我试着使用b.window(:title=>“tab\u name”)。使用do
,但也没有帮助。据我所知,它失败了,因为浏览器实际上没有将焦点更改回第一个/最后一个/指定的选项卡,并且没有焦点无法访问该页面上显示的模式。好的,但我在上面的代码中没有看到任何试图将浏览器窗口设置为指向其他选项卡的内容。。你也没有指出代码哪里出了差错,或者在什么时候开始出错等等。很难理解你的“错在哪里”。你说“PDF A现在丢失了”是什么意思?它怎么了?它不是还在表2中吗?当您提到“模态”时,您是指某种使用div实现的psuedo模态,还是真正的Javascript模态对话框(如JS警报)?
@browser.driver.switch_to.window(@browser.driver.window_handles[put_your_index])
@browser.window(:title,"Please put your title here").use do
end
@browser.button.when_present.click