Почему find (element) .click использует max_wait_time вместо указанного wait: 0, если элемент не кликабелен? - PullRequest
0 голосов
/ 23 мая 2019

Фон: проверка, является ли элемент кликабельным (я ожидаю, что он не кликабелен, я хочу это подтвердить) без ожидания.find (). click использует Capybara.max_wait_time и затем возвращает исключение:

Selenium::WebDriver::Error::UnknownError Exception: unknown error: Element <input type="text" class="form-control floatingInput" name="firstname" placeholder="Enter your first name" aria-label="First Name" value="Lynn"> is not clickable at point (415, 301). Other element would receive the click: <div class="Checkout__overlay__1cqyM"></div>

вместо немедленного возврата исключения.

Точная строка кода, которая ждет, когда она не должна, на мой взгляд.Это ждет max_wait_time (например, 20 секунд), если элемент не кликабелен (спрятан наложением, как и ожидалось).Ясно, что я поставил wait: 0

find(checkout.ship_first_name.path, wait: 0).click

Похоже, что для исключения есть другое время ожидания, или #click использует свое собственное время ожидания, однако #click не принимаетАргументы AFAIK.

Примечание 1

find (element, wait: 0) работает правильно сам по себе, так как я использую его в блоках if / else и нет ненужного ожидания, как указано,

Примечание 2

#visible? в этом случае не работает, так как элемент видим, но за прозрачным серым наложением.Мне нужно убедиться, что он не активен.

1 Ответ

0 голосов
/ 23 мая 2019

click действительно принимает несколько параметров (клавиши-модификаторы, которые должны удерживаться при нажатии, смещении клика и времени ожидания / повтора), поэтому сделать то, что вы пытаетесь сделать, будет

find(checkout.ship_first_name.path, wait: 0).click(wait: 0)

или

using_wait_time(0) do # may need to be page.using_wait_time(0) depending on your setup
  find(checkout.ship_first_name.path).click
end

Однако из Capybara 3.20+ (при условии, что вы используете Chrome или Firefox) вы также можете просто сделать

find(checkout.ship_first_name.path).obscured?

, чтобы узнать, находится ли он на странице, но скрытот нажатияЕсли вы устанавливаете ожидание того, что оно должно быть скрыто, вы должны сделать

expect(page).to have_css(checkout.ship_first_name.path, obscured: true)
...