Tag: selenium

使用watir-webdriver打开多个线程会导致“连接被拒绝”错误

我有这个简单的例子: require ‘watir-webdriver’ arr = [] sites = [ “www.google.com”, “www.bbc.com”, “www.cnn.com”, “www.gmail.com” ] sites.each do |site| arr << Thread.new { b = Watir::Browser.new :chrome b.goto site puts b.url b.close } end arr.each {|t| t.join} 每次我运行这个脚本,我都会 ruby/2.1.0/net/http.rb:879:in `initialize’: Connection refused – connect(2) for “127.0.0.1” port 9517 (Errno::ECONNREFUSED) 或者其中一个浏览器在至少其中一个线程上意外关闭。 另一方面,如果我在每个循环周期结束时设置sleep 2 ,一切运行顺利! 知道为什么会这样吗? 必须与理解线程如何工作有关…

使用Selenium Webdriver for Ruby进行HTML5拖放

是否有任何工作可以使用Selenium Webdriver和Ruby一起使用HTML5拖放工具? 我正在使用Selenium-Webdriver 2.20.0和Ruby 1.9.2 这是一个重现问题的简单测试: require “selenium-webdriver” require “test/unit” class Html5DragAndDropTest < Test::Unit::TestCase def setup @driver = Selenium::WebDriver.for :firefox @driver.manage.timeouts.implicit_wait = 30 end def teardown @driver.quit end def test_html5_drag_and_drop @driver.get("http://html5demos.com/drag") target = @driver.find_element(:id, "one") source = @driver.find_element(:id, "bin") @driver.action.drag_and_drop(target, source).perform assert target.displayed? == false end end

如何在Ruby编写的Webdriver测试中执行JavaScript?

是否有已知的解决方案在Webdriver,Ruby绑定中执行Eval(Javascript执行)? 相当于Java中的以下示例。 WebElement element = driver.findElement(By.id( “foo” )); String name = (String) ((JavascriptExecutor) driver).executeScript( “return arguments[0].tagName” , element)

Selenium RC:自动在多个浏览器中运行测试

所以,我已经开始创建一些使用Selenium RC直接在浏览器中测试我的Web应用程序的Rubyunit testing。 我正在使用Selenum-Client作为ruby。 我已经为我inheritance的所有其他selenium测试创建了一个基类。 这会创建大量SeleniumDriver实例,并在每个实例上调用所有缺少的方法。 这基本上是并行运行测试。 其他人如何自动化这个? 这是我的实现: class SeleniumTest < Test::Unit::TestCase def setup @seleniums = %w(*firefox *iexplore).map do |browser| puts 'creating browser ' + browser Selenium::SeleniumDriver.new("localhost", 4444, browser, "http://localhost:3003", 10000) end start open start_address end def teardown stop end #sub-classes should override this if they want to change it def start_address "http://localhost:3003/" end […]

如何在Capybara和RSpec中测试CSV文件下载?

以下是在控制器中: respond_to do |format| format.csv { send_data as_csv, type:’text/csv’ } end 在规格: click_link ‘Download CSV’ page.driver.browser.switch_to.alert.accept expect( page ).to have_content csv_data 但这不起作用: Failure/Error: page.driver.browser.switch_to.alert.accept Selenium::WebDriver::Error::NoAlertPresentError: No alert is present 我看到“保存文件”对话框显示,但显然它不是“警告”对话框。 如何单击确定并让Capybara查看数据?

使用Ruby在Selenium WebDriver中使用setSpeed

有没有办法在ruby中设置Selenium Webdriver的执行速度。 在perl for selenium 1(RC)中有$sel->set_speed(“500”); 但是由于Selenium RC的一些限制,我不得不转向Selenium Webdriver并且不得不开始使用Ruby,我找不到相同的function。 在某处读取选项“Slow”,“Medium”和“Fast”作为在C#和Perl中设置速度的参数,但不在Ruby中。 注意 – 我确实使用此@driver.manage.timeouts.implicit_wait = 30设置了超时,但我正在寻找执行速度。

selenium 2.4.0,如何检查是否存在警报

在使用selenium 2.4.0之前,我有以下代码: alert = page.driver.browser.switch_to.alert if alert.text …. end Selenium 2.4.0包含更改“*当没有警报时在switch_to.alert中提升。”,所以我得到一个No alert is present (Selenium::WebDriver::Error::NoAlertOpenError)exception。 如何使用selenium-web-driver 2.4.0检查是否存在警报?

Chrome 62和Flash

我有一个基于Flash的应用程序,我需要使用Cucumber进行测试。 由于默认情况下未启用闪存,因此我需要在每次测试之前启用它,并将我认为的url列入白名单。 如果我暂停测试的后台阶段,我可以手动设置这些选项。 我怎么能自动化这种方法,我已经考虑过添加options和preferences ,但似乎仍然无法开始工作。 所以这是我在env.rb文件中的标准设置 Capybara.register_driver :chrome do |app| chrome_binary = ‘/Applications/Google Chrome.app’ capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(“chromeOptions” => { “binary” => chrome_binary + ‘/Contents/MacOS/Google Chrome’ }) Capybara::Selenium::Driver.new(app, :browser => :chrome, :desired_capabilities => capabilities, :options => options) end 进一步阅读强调了诸如此类的选项 options = Selenium::WebDriver::Chrome::Options.new options.add_argument(‘arg-here’) prefs = {“enable flash here ? “} options.add_experimental_option(“prefs”, prefs) undefined method add_experimental_option for […]

使用Selenium模仿将文件拖到上传元素上

我有一个网页,当你点击一个按钮时打开一个div。 此div允许您将文件从桌面拖到其区域; 然后该文件上传到服务器。 我正在使用Selenium的Ruby实现。 通过在Firefox中使用JavaScript调试器,我可以看到一个名为“drop”的事件正被传递给某些JavaScript代码“handleFileDrop(event)”。 我认为如果我要创建一个模拟事件并以某种方式触发它我可以触发此代码。 如果发现一篇有趣的文章似乎指向了一个很有希望的方向,但我仍然没有把它全部搞清楚。 我可以使用Selenium的get_eval方法将JavaScript传递给页面。 使用this.browserbot调用方法让我获得了我需要的元素。 所以: 如何构建需要成为模拟放置事件一部分的文件对象? 如何触发掉落事件,使其被拾取,好像我在div中删除了一个文件?