установить флажок с помощью watir

Это не рекомендуемый способ решить эту ошибку, но вы можете быстро ее подавить, она выполнит эту работу. Я предпочитаю это для прототипов или демонстраций. добавьте

CheckForIllegalCrossThreadCalls = false

в конструкторе Form1().

0
задан Omar 13 July 2018 в 03:51
поделиться

2 ответа

вы можете нажать на тег ins, чтобы установить значение флажка, как указано ниже.

if !browser.checkbox(id: 'order_terms').set? then
   puts "not set"
   browser.element(class: 'iCheck-helper').click
end
puts browser.checkbox(id: 'order_terms').set? 
1
ответ дан Murthi 17 August 2018 в 13:42
поделиться
  • 1
    Вам не нужно выполнять эту проверку, WATIR создает объект для флажка, и связанные с ним методы сразу же доступны для вас. Таким образом, вам не нужно проверять, установлено ли оно или нет. Если вы b.checkbox().set, он будет установлен, если он не установлен, если он установлен, тогда он останется нетронутым. Если вы используете b.element (), нажмите, тогда вы должны позаботиться о вышеуказанных условиях, как вы написали. Selenium создает общие объекты для элементов, но WATIR создает более абстрактную версию, создавая объект для каждого типа, например Text_field имеет свой собственный объект, поэтому его методы разделены. – Rajagopalan 13 July 2018 в 05:57
  • 2
    Омар имеет перекрывающуюся проблему. Он не мог напрямую взаимодействовать с флажком. Кроме того, я нажимаю на тег ins, который является верхней частью флажка. если я нажму на элемент ins, он установит / коснется косвенно. Так что, я использовал его здесь. подождите, пока омар вернется. – Murthi 13 July 2018 в 06:01
  • 3
    Ах, ладно, я вижу вашу точку зрения. – Rajagopalan 13 July 2018 в 06:14
  • 4
    У Watir есть класс и метод для элементов ins. Возможно, будет более ясно browser.ins(class: 'iCheck-helper').click – Justin Ko 13 July 2018 в 12:43
  • 5
    Я был бы осторожен, если бы это было уникальным. Рассмотрим вариант: browser.checkbox(id: 'order_terms').next_sibling(tag_name: 'ins').click – titusfortner 13 July 2018 в 17:03

Попробуйте это

 browser.checkbox(id: "order_terms").set

Когда вы обнаруживаете элемент, этот элемент должен быть установлен, когда вы используете этот метод, но вы передаете локатор метода div методу checkbox.

0
ответ дан Rajagopalan 17 August 2018 в 13:42
поделиться
  • 1
    я получаю сообщение об ошибке в консоли, что-то вроде = неизвестной ошибки: Element & lt; input class = & quot; checkbox & quot; .... / & GT; не кликается в точке (541 520). Другой элемент мог бы получить щелчок & lt; ins class = & quot; iCheck-helper & quot; ... / & gt; – Omar 13 July 2018 в 04:13
  • 2
    @omar Попробуйте использовать явное ожидание перед нажатием на элемент. – Gautam Bothra 13 July 2018 в 04:45
  • 3
    @GautamBothra Явное ожидание не нужно, если вы используете WATIR. Если вы используете Ruby Selenium Binding напрямую, вам может понадобиться его использовать. WATIR ожидает, что элемент будет существовать, виден, включен, а затем он будет выполнять щелчок. Но вышеупомянутая ошибка произошла из-за наложения другого элемента, когда эта ошибка происходит, предопределенное исключение доступно только для Firefox, оно недоступно для Chrome или для Edge. И WATIR не спасает это по многим причинам. Некоторые наложения являются постоянными, поэтому они не спасают эту ошибку. Возможно, в будущем они могут сделать, но недоступны прямо сейчас. – Rajagopalan 13 July 2018 в 05:42
  • 4
    @Omar Хорошо, поэтому он правильно идентифицировал элемент, проблема в том, что другой элемент накладывает этот элемент. И также я видел, что вы запускали Javascript, щелкнув родителя флажка, но он не работает. Так что сделайте одно. Поместите этот код в начало блока и выполните повторную попытку и проверьте, работает ли он. Потому что в моем приложении элемент скоро будет доступен мне из этого состояния. – Rajagopalan 13 July 2018 в 05:45
Другие вопросы по тегам:

Похожие вопросы: