【问题标题】:Ruby / Watir : how to click on a disabled button (Watir::Exception::ObjectDisabledException)Ruby / Watir:如何单击禁用按钮 (Watir::Exception::ObjectDisabledException)
【发布时间】:2019-10-12 10:15:02
【问题描述】:

我想用 Ruby 编写一个程序来创建一个 github 存储库。一切都很好,但是当我想在填写存储库名称后单击“创建存储库”按钮时,什么也没发生,程序因超时错误而停止。

这是禁用按钮的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>

这是我的红宝石程序

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 输入,我的 prog 也无法访问该按钮。

那么您对此有解决方案吗?或者你知道是否还有其他 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)"

【问题讨论】:

  • 首先,当您使用 WATIR 时,您不必使用隐式等待。其次,您不必明确等待按钮启用,因为这太自动了。最后发布您在这里收到的错误消息。
  • 感谢您的回答,我编辑帖子
  • 好的,然后元素被禁用。手动执行相同的流程并检查它是否被禁用。
  • 当我检查我的程序打开的网站页面时,在为 repo 名称填写 text_field 区域后,按钮从禁用变为启用。但是我的程序还是不能点击
  • 好的,让我检查一下。但我今天做不到。星期一早上我可以。

标签: ruby github watir submit-button disable


【解决方案1】:

我认为下面的代码可能对你有用

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

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

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

【讨论】:

  • 我认为一旦我们将焦点移出该字段,该按钮就会启用。您也可以手动查看此内容,当您输入 repo name 时,该按钮被禁用,但只要您单击其他位置,它就会启用。我对答案进行了更改,请尝试一下。
【解决方案2】:

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

# 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") 返回页面上的第一个提交按钮,即禁用的“设置状态”按钮。

“创建存储库”按钮实际上是页面上的最后一个按钮。需要更具体的按钮定位器。一些选项:

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

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

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 2012-03-06
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多