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:chrome
和require 'pry'
。和“下一个”而不是“ n”(因为撬使用“下一个”)。同样的问题。
然后我尝试了binding.pry
和require 'pry-byebug'
和'next'而不是'n'(因为pry-byebug使用了'next')。也是同样的问题。
根据rs的建议,我尝试了'binding.pry'
和require 'pry'
以及binding.pry(停止)。并尝试了require 'pry-byebug'
而不是step
。另外,同样的问题。我现在添加了此输出。
进一步添加
next
答案 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 pry
和require 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".