当我写
b.windows.last.use do
b.link.click
end
单击后,WATIR会自动切换回第一个窗口,现在我可以在第一个窗口上开始操作,但是我不知道如何关闭此子窗口并在第一个窗口上开始操作。我可以用硒来做,但是我不知道如何在瓦蒂尔里做。
我尝试过的
require 'watir'
driver = Selenium::WebDriver.for :firefox
b = Watir::Browser.new driver
b.goto("https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open")
b.iframe(id: 'iframeResult').element(xpath: "//button[contains(text(),'Try it')]").click
firstWindow=b.windows.first
b.windows.last.use do
b.element(text: 'LEARN HTML').click
end #end of this block automatically switch back to first window.
b.windows.last.close #Closing the child window
#b.iframe(id: 'iframeResult').element(xpath: "//button[contains(text(),'Try it')]").click
#This above line is not working so made a switch in the following line
firstWindow.use do #but it's not working as expected too.
b.iframe(id: 'iframeResult').element(xpath: "//button[contains(text(),'Try it')]").click
end
WATIR允许我通过自动切换在父窗口上进行操作,但是如果在自动切换后关闭子窗口,即使进行了自动切换或已连接至该窗口,我也无法连接回父窗口父窗口丢失。
答案 0 :(得分:0)
啊,看来我们进行的性能增强导致与Firefox发生错误冲突-https://github.com/mozilla/geckodriver/issues/610
首先,我个人避免在使用Windows时使用块,因此我的代码应如下所示:
b.window(url: 'https://www.w3schools.com/').use
# do things
b.window.close
b.original_window.use
问题在于,因为打开第二个窗口的元素位于iframe中,所以当Watir切换回第一个窗口时,Firefox将浏览上下文保留在iframe中,而不是将其还原到顶级上下文中。 Watir过去总是在每次元素查找时重置它,但是那是额外的线路调用,因此我们缓存了上下文,现在仅在必要时才进行调用以切换到顶部。
在Mozilla修复该错误之前的临时解决方法是:
b.wd.switch_to.default_content