【发布时间】:2011-08-31 23:15:24
【问题描述】:
我是 ruby 和 Watir 的新手,这是我的问题...
我有一个 MySQL 数据库,其中包含我需要的测试数据。过去我对这些数据做了很多工作,所以我有一个完整的 PHP 工具库来访问这些数据,将数据标记为使用/使用/坏/等,总的来说,我有很多时间投入到PHP 框架。所以我真的很想使用 PHP 框架作为 Watir 脚本的包装器——例如,使用 PHP 从数据库中获取测试用户登录数据并将其传递给 ruby 脚本进行处理。
我现在有需要工作/测试的带有 javascript 的网站,而 PHP 和 cURL 无法处理这个问题。因此,我正在为这些站点在 Ubuntu 10.10(Maverick,桌面而非服务器)上使用 Watir-WebDriver。我遇到的问题是在所有 Watir 代码中使用 PHP 的 shell_exec 的 ruby 脚本。
PHP shell_exec 正在执行该文件 - 我可以看到它,因为我在文件中有一些正在显示的 puts 行。但是,代码似乎在线失败
ff = Watir::Browser.new :firefox
我没有收到来自 PHP 的错误。
PHP 行是:
echo shell_exec('ruby /var/www/watir_test.rb');
当我从终端窗口调用 ruby 脚本时,它运行良好:
ruby /var/www/watir_test.rb
我最初预计这是一个权限问题,因为它可以从命令行运行,但不能从浏览器运行。但是,由于它可以很好地调用文件以返回我为测试提供的硬编码数据,因此 ruby 文件权限似乎不是问题。从 www-data 用户打开 Firefox 窗口是否存在权限问题?
当我跑步时
ruby -d -v /var/www/watir_test.rb
我明白了:
{:extension=>:webdriver} {"app.update.enabled"=>"false"} {"browser.link.open_newwindow"=>"2"} {"browser.shell.checkDefaultBrowser"=>"false"} {"extensions.update.enabled"=>"false"} {"security.warn_entering_secure.show_once"=>"false"} {"webdriver_assume_untrusted_issuer"=>true} {"startup.homepage_welcome_url"=>"\"about:blank\""} {"browser.tabs.warnOnClose"=>"false"} {"extensions.update.notifyUser"=>"false"} {"toolkit.networkmanager.disable"=>"true"} {"security.warn_entering_weak.show_once"=>"false"} {"webdriver_firefox_port"=>"7055"} {"browser.download.manager.showWhenStarting"=>"false"} {"extensions.logging.enabled"=>"true"} {"network.manage-offline-status"=>"false"} {"network.http.max-connections-per-server"=>"10"} {"security.warn_submit_insecure"=>"false"} {"security.warn_entering_weak"=>"false"} {"security.warn_leaving_secure"=>"false"} {"prompts.tab_modal.enabled"=>"false"} {"security.warn_viewing_mixed.show_once"=>"false"} {"dom.max_script_run_time"=>"30"} {"webdriver_accept_untrusted_certs"=>true} {"browser.safebrowsing.enabled"=>"false"} {"security.warn_leaving_secure.show_once"=>"false"} {"signon.rememberSignons"=>"false"} {"javascript.options.showInConsole"=>"true"} {"app.update.auto"=>"false"} {"browser.EULA.3.accepted"=>"true"} {"browser.tabs.warnOnOpen"=>"false"} {"dom.disable_open_during_load"=>"false"} {"network.http.phishy-userpass-length"=>"255"} {"security.warn_entering_secure"=>"false"} {"browser.startup.homepage"=>"\"about:blank\""} {"browser.EULA.override"=>"true"} {"browser.dom.window.dump.enabled"=>"true"} {"browser.startup.page"=>"0"} {"browser.link.open_external"=>"2"} {"browser.search.update"=>"false"} {"browser.sessionstore.resume_from_crash"=>"false"} {"security.warn_viewing_mixed"=>"false"} {"dom.report_all_js_exceptions"=>"true"} {"webdriver_enable_native_events"=>false} {"devtools.errorconsole.enabled"=>"true"}
如何让 PHP 正确执行 shell_exec?该脚本有效,我的初始测试是使用 firewatir 运行的(shell_exec 运行良好),但我真的很想使用 Watir-WebDriver 而不是 FireWatir - WatirWebDriver 应该能够在 FireWatir 上运行 Chrome 浏览器(和 Windows 机器上的 IE)只能运行 Firefox。
谢谢 加布
这是我的“创建浏览器”代码:
# Include the RubyGems file
require 'rubygems'
# Include the Watir-WebDriver file.
require 'watir-webdriver'
# Create the necessary objects
def create_browser(proxy)
# Setup the proper Firefox Profile
profile = Selenium::WebDriver::Firefox::Profile.new
profile.proxy = Selenium::WebDriver::Proxy.new :http => proxy
puts "<br>Using proxy " + proxy + "..."
#ff=FireWatir::Firefox.new :profile => profile
ff = Watir::Browser.new :firefox #, :profile => profile
puts "<br>Firefox ready..."
return ff
end
【问题讨论】:
-
对不起,我还想说,当我从 Ubuntu 终端运行它时,会打开一个新的 Firefox 窗口,我可以看到 Watir 登录。当我从浏览器运行 PHP 文件时,不会创建新的 Firefox 窗口 - 而不是当我在 Ubuntu 服务器上或从另一个机器(Win 7)运行它时。
-
网络用户是否有正在运行的 X?由 www-data 启动的 Firefox 会出现在由 www-data 运行的 X 上。
-
虽然我对 Ubuntu 相当熟悉,但我不是专家。我对 X 不熟悉。我一直在观察通过 htop 运行的进程——据我所知,在任何用户下都没有运行 Firefox 任务。 htop 正在向我展示 mysql、root、gabe 和 www-data 用户的任务/作业。
标签: php ubuntu watir watir-webdriver