在红宝石中,我无法让byebug与硒一起使用

时间:2018-12-28 17:40:07

标签: ruby selenium irb byebug

defaultConfig {
    applicationId "com.companyName.appName"
    minSdkVersion 16
    targetSdkVersion 27
    multiDexEnabled true
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

运行程序时,它会直接转到require 'selenium-webdriver' require 'byebug' byebug driver = Selenium::WebDriver.for:chrome driver.navigate.to "http://google.com" puts driver.find_element(:tag_name, 'input'); puts driver.find_element(:name, 'q'); driver.find_element(:name, 'q').send_keys("asdf"); #sleep 20

我按下'n',然后加载Chrome,然后转到google,并将这些键发送到输入框中,然后退出程序。

我想发生的事情是我打了'n'到driver = Selenium::WebDriver.for:chrome。我再次点击'n',它转到driver.navigate.to "http://google.com"。而且我想从控制台运行类似driver.find_element的命令。...但是我不能,因为byebug不在puts driver.find_element(:tag_name, 'input');行之后跟踪程序。

我希望能够从控制台/ irb / byebug中使用Selenium检出DOM

已添加

评论建议使用撬动

所以我尝试了driver = Selenium::WebDriver.for:chromerequire 'pry'。和“下一个”而不是“ n”(因为撬使用“下一个”)。同样的问题。

然后我尝试了binding.pryrequire 'pry-byebug'和'next'而不是'n'(因为pry-byebug使用了'next')。也是同样的问题。

根据rs的建议,我尝试了'binding.pry'require 'pry'以及binding.pry(停止)。并尝试了require 'pry-byebug'而不是step。另外,同样的问题。我现在添加了此输出。

进一步添加

next

2 个答案:

答案 0 :(得分:0)

此宝石“添加了逐步调试和堆栈导航功能,可以使用byebug进行撬动。” {引自pry-byebug},因此您必须同时使用pry和byebug才能使用pry byebug。因此,请确保同时安装了两个gem:您可以将两个gem都添加到GemFile中并执行bundle install或直接执行,之后,您需要同时执行两个操作,然后添加binding.pry,执行将在之后的第一个语句处停止那。

“默认情况下,别名'n', 's', 'c' and 'f'已被删除,因为它们通常与暂存变量名冲突。但是,如果仍然需要别名,可以很容易地重新启用它们,只需将以下快捷方式添加到〜/ .pryrc文件中: “

if defined?(PryByebug)
  Pry.commands.alias_command 'c', 'continue'
  Pry.commands.alias_command 's', 'step'
  Pry.commands.alias_command 'n', 'next'
  Pry.commands.alias_command 'f', 'finish'
end

我在上面提供的链接中提供了更多详细信息,希望这会有所帮助。

由barlop添加

rs评论,发问者尝试require pryrequire pry-byebug并暂停binding.pry

答案 1 :(得分:0)

以下是部分答案。它不能解决pry / byebug / pry-byebug问题,但是可以解决这一部分,

问题要问的一件事是

  

”“我希望能够从控制台中使用Selenium签出DOM。   / irb / byebug”

使用Selenium的代码确实可以正常运行,直接输入irb

$ irb
irb(main):001:0> require 'selenium-webdriver'
=> true

irb(main):011:0> driver = Selenium::WebDriver.for:firefox
=> #<Selenium::WebDriver::Firefox::Marionette::Driver:0x..fcead308af2433ac2 browser=:firefox>

irb(main):013:0> driver.navigate().to("http://www.google.com")
=> nil

irb(main):036:0> inps=driver.find_elements(:tag_name, "input");
=> [#<Selenium::WebDriver::Element:0x..f8ed35db92a849eea id="dac....

irb(main):041:0> inps[2].attribute('name');
=> "q"

irb(main):042:0> inps[2].attribute('value');
=> ""  <-- shows whatever is typed in that google search box eg prior to checking the value we could've typed something e.g. 'asdf' into it manually or programmatically eg driver.find_element(:tag_name, "input").send_keys("asdf");  and it will show "asdf".