使用Watir在Chrome中打开新标签会导致使用打开的标签出现问题

时间:2013-05-08 22:00:15

标签: google-chrome pdf tabs watir-webdriver selenium-chromedriver

简短版本: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文档。
  5. 所有标签保持打开状态,可以查看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文档。
    6. 这是因为使用“b.windows.last.use”引起的 所以我尝试使用“b.windows.first.use” 但这失败了,因为焦点不会回到标签#1,并且watir无法在模式中找到它需要单击的对象。 (在`assert_ok':元素在点(737.5,-373)不可点击(Selenium :: WebDriver :: Error :: UnknownError))

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

      ,我会没事的
      1. 下载PDF文件。我不能。 This page似乎很有希望,但代码不起作用,我无法修复它。
      2. 让我们回到第一页“for realsies”,找到所需的按钮
      3. 或许为测试的每个部分打开一个新标签(我将调查这个,但我并不过分充满希望)
      4. 有什么想法吗? 我在最近两个月内更新了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"
        

2 个答案:

答案 0 :(得分:0)

似乎主要是browser.window函数没有按照您期望的方式工作,或者您没有正确使用它。由于您的问题目前在如何尝试更改窗口(标签)的示例方面很少,因此很难说出您可能做错了什么。

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

进入IRB,然后使用

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

现在手动浏览打开的浏览器窗口,使其进入打开多个标签页的状态

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

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

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

答案 1 :(得分: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. 当您想要切换回实际窗口时,请使用 与上面相同的代码并相应地更改窗口索引。
  2. 例如,如果父窗口索引为0,则子窗口索引为1