简短版本:Chrome中的新标签可以防止使用旧标签,修复这意味着在人们可以检查PDF之前,可以重复使用包含PDF的已打开标签。
长版: 最初它的工作原理如下:
所有标签保持打开状态,可以查看PDF。不完美,但可行。
但事情发生了变化。我把经常使用的东西拉出来,把它们放在另一个文件中的方法中,这样所有各种测试都可以使用它们,这似乎是一个好主意。但这似乎导致了失去对原始窗口的关注的问题。 (我可能错了)现在我坚持:
这是因为使用“b.windows.last.use”引起的 所以我尝试使用“b.windows.first.use” 但这失败了,因为焦点不会回到标签#1,并且watir无法在模式中找到它需要单击的对象。 (在`assert_ok':元素在点(737.5,-373)不可点击(Selenium :: WebDriver :: Error :: UnknownError))
据我所知,如果我可以做以下任何一项
,我会没事的有什么想法吗? 我在最近两个月内更新了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"
答案 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
例如,如果父窗口索引为0
,则子窗口索引为1