无法使用selenium webdriver和ruby单击带有id的弹出窗口

时间:2013-09-25 11:29:24

标签: ruby selenium selenium-webdriver

以下是我正在使用的代码

def self.yes_publish
      sleep 5
      driver.find_element(:id, 'dialogConfirmChanges-publishButton').displayed?
      WAIT.until { driver.find_element(:id, 'dialogConfirmChanges-publishButton') }.click        
      puts driver.find_element(:id, 'embed-left-center-part').displayed?
     end

但我无法点击它。这个id在irb中工作正常。 我得到一个错误模式对话框,因为webdriver在特定超时后无法找到它关闭窗口的元素。 此弹出窗口用于发布在页面上所做的更改。

xpath = .//*[@id='dialogConfirmChanges-publishButton']

1 个答案:

答案 0 :(得分:1)

您必须使用switch_to方法来处理弹出窗口。查看JavaScript dialogs的文档:

您可以使用webdriver处理Javascript alert(),prompt()和confirm()对话框。三者的API都是相同的。

注意: 此时警报处理仅适用于Firefox和IE(或通过远程服务器在这些浏览器中),并且仅在onload后生成警报可以捕获。

require "selenium-webdriver"

driver = Selenium::WebDriver.for :firefox
driver.navigate.to "http://mysite.com/page_with_alert.html"

driver.find_element(:name, 'element_with_alert_javascript').click
a = driver.switch_to.alert
if a.text == 'A value you are looking for'
  a.dismiss
else
  a.accept
end

修改

根据你给出的评论框HTML ..我认为下面应该有效:

driver.find_element(:xpath,"//div[@class='ui-dialog-buttonset']/button[@id='dia‌​logConfirmChanges-publishButton']").click