Watir строковое значение исключено Ruby

Предупредить Watir [Depreciation], используя локатор:class для определения местоположения нескольких классов со строковым значением, не рекомендуется. Вместо этого используйте массив

я получаю эту ошибку при запуске этой строки

browser.button(:class => '_t38eb _ov9ai').click

который я думаю, это один класс, а не несколько классов, я попробовал это как упоминание в враждующих

browser.button(:class => ['_t38eb','_ov9ai']).click

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

и если я напишу это, хромедрайвер заканчивается

browser.button(:class == '_t38eb _ov9ai').click

2 ответа

Решение

Существует разница между драйвером Chrome и драйвером Firefox во время автоматизации. Ваш браузер закрывается, потому что драйвер chrome закрывает браузер один раз после выполнения вашего кода, но драйвер Firefox не закрывает браузер. Если вы хотите оставить браузер Chrome открытым, используйте этот код

require 'watir'
caps = Selenium::WebDriver::Remote::Capabilities.chrome(chrome_options: {detach: true})
b = Watir::Browser.new :chrome, desired_capabilities: caps

Приведенный ниже код не работает

browser.button(:class == '_t38eb _ov9ai').click

Это потому что button() Метод нужен Hash Object, а не объект TrueClass или же FalseClass который вы передаете, пока пишете :class == '_t38eb _ov9ai'

Если вы хотите передать массив, вам лучше использовать #split:

browser.button(:class => '_t38eb _ov9ai'.split).click

FYI: Watir с открытым исходным кодом.

Эта строка является источником предупреждения об устаревании.

Причиной такого осуждения является создание более идиоматического xpath с contains(this) and contains(that),

Я не уверен, почему это замерзает, но я уверен, что совершенно безопасно игнорировать предупреждение.

Другие вопросы по тегам