Давайте используем то, что предложил Tymoteusz для ролей:
Разделите свою игру на две роли , где первая роль будет выполнять проверку (и задает результат проверки переменной удерживания), а вторая будет действовать по результатам проверки.
Я создал aaa.yaml
с этим контентом:
---
- hosts: all
remote_user: root
roles:
- check
- { role: doit, when: "check.stdout == '0'" }
...
, затем роль check
в roles/check/tasks/main.yaml
:
---
- name: "Check if we should continue"
shell:
echo $(( $RANDOM % 2 ))
register: check
- debug:
var: check.stdout
...
, а затем роль doit
в roles/doit/tasks/main.yaml
:
---
- name: "Do it only on systems where check returned 0"
command:
date
...
И это был результат:
TASK [check : Check if we should continue] *************************************
Thursday 06 October 2016 21:49:49 +0200 (0:00:09.800) 0:00:09.832 ******
changed: [capsule.example.com]
changed: [monitoring.example.com]
changed: [satellite.example.com]
changed: [docker.example.com]
TASK [check : debug] ***********************************************************
Thursday 06 October 2016 21:49:55 +0200 (0:00:05.171) 0:00:15.004 ******
ok: [monitoring.example.com] => {
"check.stdout": "0"
}
ok: [satellite.example.com] => {
"check.stdout": "1"
}
ok: [capsule.example.com] => {
"check.stdout": "0"
}
ok: [docker.example.com] => {
"check.stdout": "0"
}
TASK [doit : Do it only on systems where check returned 0] *********************
Thursday 06 October 2016 21:49:55 +0200 (0:00:00.072) 0:00:15.076 ******
skipping: [satellite.example.com]
changed: [capsule.example.com]
changed: [docker.example.com]
changed: [monitoring.example.com]
Это не идеально: выглядит вы будете видеть, что пропускает статус для всех задач для пропущенных систем, но может сделать трюк.
Это iFrame отсюда NosuchElement exception
.
Вам нужно switchTo().frame
, в вашем случае это должно выглядеть так:
driver.switchTo().frame("notification-frame-~5586290a");
После переключения в iframe
вы можете нажимать кнопки там ...
В вашем случае, если вы хотите закрыть его, сделайте что-то вроде:
driver.FindElementsByXPath('//*[@class="wewidgeticon we_close icon-large"]').click()
Если вы не закрываете его, но хотите вернуться к кадру по умолчанию, просто используйте:
driver.switchTo().defaultContent();
Надеюсь, это поможет вам!