与Selenium的模态对话窗口

时间:2015-08-04 15:36:48

标签: javascript jquery selenium rspec

所以我尝试使用Selenium导航到IE9中的页面,在加载页面时,表示存在证书错误。使用AutoIT我可以让它在浏览器中单击,然后TAB两次然后按Enter键,没有问题。但是当它继续时,它会抛出一个"模态对话框出现错误"。以下是应该处理IE安全警告错误的方法:

var VueCreator = function (id, endPoint) {
    var myVue = new Vue({
        el: id,

        data: {
            videos: []
        },

        ready: function() {
            this.fetchVideos();
        },

        methods: {
            fetchVideos: function() {
                this.$http.get(endPoint, function(videos) {
                    this.videos = videos;
                });
            }
        }
    });

    return myVue;
}

//pseudo code, assumes videoList is an object that has each unique list with an id and an endpoint
var lists = [];
forEach(videoList, function(obj) {
    var tempList = new VueCreate(obj.id, obj.endPoint);
    lists.push(tempList);
})

我能在这里做的最好的事情是在"睡眠0.25"打电话是这样做的:

# Handle IE Security Warning errors.
class  Selenium::WebDriver::Navigation
  def to(url)
  @bridge.get url
  if @bridge.getTitle.match(/Certificate Error.*/)
      Thread.new do
        sleep 0.75
        security_warning = 'Security Warning'
        if @auto_it.WinActive(security_warning)
             @auto_it.ControlClick(security_warning, "Yes", '[CLASS:Button; INSTANCE:2]' )
      end
       auto_it = WIN32OLE.new("AutoItX3.Control")
       auto_it.WinWait('[CLASS:IEFrame]','', 90)
       x = auto_it.WinGetPosX('[CLASS:IEFrame]') 
       y = auto_it.WinGetPosY('[CLASS:IEFrame]')
       auto_it.MouseClick("left", x + 100, y + 200, 1, 0) 
       auto_it.Send "{TAB 2}{ENTER}"
       sleep 0.25
       wait.until { @bridge.executeScript("return document.readyState;") == "complete" }
    end
  end
end

(除了{ENTER}没有做任何事情,它只会挂起,直到测试超时)

我需要知道如何让Selenium与弹出的对话框进行交互。我知道Selenium并不能很好地处理它们(这就是使用AutoIT的原因)。有什么想法吗?

P.S。这不是我的代码,这个方法是由我的同事创建的

1 个答案:

答案 0 :(得分:0)

如果这是IE中显示的典型SSL证书错误警告,那么您可能需要使用JavascriptExecutor来处理它,如本博文中详细描述的那样:

http://automatictester.co.uk/2014/08/03/handling-ssl-certificate-errors-in-selenium/

一般情况下,尽量避免将AutoIT与Selenium混合使用,除非你真的需要。