0

短版:Chrome 中的新标签页阻止旧标签页被使用,修复这意味着打开的带有 PDF 的标签页在人们可以检查 PDF 之前被重用。

长版:最初它是这样工作的:

  1. 打开新的 Chrome 窗口到应用程序的主页(标签 #1) 2.[执行进程 A,然后] 单击按钮并打开一个新标签(标签 #2),其中包含 PDF A。
  2. 返回选项卡#1 [执行流程 B 然后] 单击按钮并打开一个新选项卡(选项卡 #3),其中包含 PDF B。
  3. 返回选项卡#1 [执行进程 C 然后] 单击按钮并打开一个新选项卡(选项卡 #4)并下载 Word 文档 C 文档。
  4. 返回选项卡#1 [执行进程 D,然后] 单击按钮并打开一个新选项卡(选项卡 #5)并下载 Word 文档 D 文档。

所有选项卡都保持打开状态,并且可以查看 PDF。不完美,但可行。

但后来事情发生了变化。我把常用的东西拿出来,把它们放在另一个文件的方法中,这样所有的各种测试都可以使用它们,这似乎是个好主意。但这似乎导致了失去对原始窗口的关注的问题。(我可能错了)现在我坚持:

  1. 打开新的 Chrome 窗口到应用程序的主页(标签 #1)
  2. [执行处理 A 然后] 单击按钮并打开一个新选项卡(选项卡 #2),其中包含 PDF A。
  3. 留在选项卡 #2 [执行流程 B 然后] 单击按钮并打开一个新选项卡(选项卡 #3),其中包含 PDF B。PDF A 现在丢失了
  4. 留在标签 #3 [执行进程 C 然后] 单击按钮,一个新标签(标签 #4)打开并下载 Word 文档 C 文档。PDF B 现在丢失了
  5. 停留在选项卡#4 [执行进程 D 然后] 单击按钮并打开一个新选项卡(选项卡 #5)并下载 Word 文档 D 文档。

这是由使用“b.windows.last.use”引起的所以我尝试使用“b.windows.first.use”但是失败了,因为焦点不会回到标签#1,并且 watir 找不到模态中需要单击的对象。(在 `assert_ok' 中:元素在点 (737.5, -373) (Selenium::WebDriver::Error::UnknownError) 处不可点击)

据我所知,如果我能做到以下任何一项都可以

  1. 获取 PDF 下载。我不能。这个页面看起来很有希望,但代码不起作用,我无法修复它。
  2. 让 watir 回到第一页,“for realsies”,然后找到它需要的按钮
  3. 也许为测试的每个部分打开一个新标签(我将研究这个,但我并不太抱有希望)

有任何想法吗?我在过去两个月内更新了 Watir 和 Ruby。我在 OSX 上使用 Chrome。迁移到 Windows 或 IE 不是可行的选择。

这是代码的一部分。不,我首先不是程序员。

谢谢。

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"
4

2 回答 2

0

似乎大多数情况下 browser.window 函数没有按您期望的方式工作,或者您没有正确使用它。由于您的问题目前很少包含有关您如何尝试更改窗口(选项卡)的示例,因此很难判断您可能做错了什么。

首先,我会使用 IRB 进行一些探索和故障排除

进入 IRB,然后使用

require 'watir-webdriver'
b = Watir::Browser.new :chrome

现在手动导航打开的浏览器窗口并使其进入打开多个选项卡的状态

现在在 IRB 中尝试这样的事情,看看你是否可以让它吐出窗口标题

b.windows.each {|window| puts window.title}

如果标题不同,那么您应该能够使用它来设置要使用的窗口。如果它们没有不同,您将需要查看其他属性,看看是否有一种简单的方法来识别您想要的窗口。(或者也许只是使用:索引)

于 2013-05-15T20:29:38.930 回答
0

试试下面的代码,

睡觉 (2)

@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
  1. 当您想切换回您的实际窗口时,请使用与上面相同的代码并相应地更改窗口索引。

例如,如果父窗口索引是0,然后子窗口索引将是1

于 2015-03-31T19:14:27.320 回答