Ruby / Watir:如何点击禁用的按钮(Watir::Exception::ObjectDisabledException)

Ruby / Watir : how to click on a disabled button (Watir::Exception::ObjectDisabledException)

我想在 Ruby 中创建一个程序来创建 github 存储库。一切正常,但是当我想在填写存储库名称后单击按钮 'create repository' 时,没有任何反应,程序因超时错误而停止。

这是禁用按钮的 html 代码:

<button type="submit" class="btn btn-primary first-in-line" data-disable-with="Creating repository…" disabled="">
        Create repository
      </button>

启用按钮的 html 代码:

<button type="submit" class="btn btn-primary first-in-line" data-disable-with="Creating repository…">
        Create repository
      </button>

这是我的 ruby 程序

repo_name = gets.chomp
repo = browser.text_field(id: 'repository_name')
repo.set(repo_name)

browser.driver.manage.timeouts.implicit_wait = 3

create_button = browser.button(type: "submit")
create_button.wait_until(&:enabled?).click

我很确定我的 pb 出现了,当我登陆页面时,按钮被禁用,即使我正在填写 repository_name 输入,我的程序也无法访问到按钮。

那你有解决办法吗?或者你知道是否还有其他 pb 吗?

编辑:

这里是没有等待命令的代码:

repo_name = gets.chomp
repo = browser.text_field(id: 'repository_name')
repo.set(repo_name)

create_button = browser.button(type: "submit").click

当我 运行 它时,我遇到了 'Watir::Exception::ObjectDisabledException' 错误

("element present, but timed out after 30 seconds, waiting for #
<Watir::Button: located: true; {:type=>"submit", :tag_name=>"button"}> to be enabled (Watir::Exception::ObjectDisabledException)"

我认为以下代码可能适合您

browser.text_field(id: 'repository_name').set("repo_name")
browser.send_keys(:tab)

正如贾斯汀在他的回答中提到的那样,单击下面的创建存储库按钮:

browser.button(type: "submit", visible: true).click 

问题是页面上有多个提交按钮。您可以通过检索按钮集合来查看:

# Button text:
browser.buttons(type: 'submit').map(&:text_content)
#=> ["Set status", "Sign out", "Create repository"]

# Disabled status:
browser.buttons(type: 'submit').map(&:disabled?)
#=> [true, false, false]

browser.button(type: "submit") returns页面第一个提交按钮,也就是禁用的"Set status"按钮。

"Create repository" 按钮实际上是页面上的最后一个按钮。需要一个更具体的按钮定位器。部分选项:

# By text
browser.button(text: 'Create repository')

# By visibility (since the other 2 are hidden by default)
browser.button(type: "submit", visible: true)