Салат / селен удаляет вновь созданные элементы DOM

Сценарий

Given I navigate to the table menu
When I click the "Add" button
And I fill "First name" with "Bob"
And I fill "Last name" with "Dylan"
And I click the "Create" button
Then I should see a new entry with a name of "Bob Dylan"

Определения шагов

@step(u'I click the "(.*)" button')
def i_click_the_named_button(step, field):
    button = world.browser.find_element_by_xpath('(//a[contains(text(),"{0}") and not(contains(@style, "display:none"))] | //input[@value="{0}" and not(contains(@style, "display:none"))] | //li[contains(text(), "{0}") and not(contains(@style, "display:none"))])[1]'.format(field))
    button.click()

@step(u'I fill "(.*)" with "(.*)"')
def i_fill_in_field_with_value(step, field, value):
    try:
        label = world.browser.find_element_by_xpath('//label[contains(text(),"%s")]' % field)
        id = label.get_attribute('for')

        input = world.browser.find_element_by_id(id)
        input.clear()
        input.send_keys(value)
    except:
        input = world.browser.find_element_by_xpath('//input[@placeholder="%s"]' % field)    
        input.clear()
        input.send_keys(value)

Ошибка

NoSuchElementException: Сообщение: u 'такого элемента нет (Информация о сеансе: chrome = 31.0.1650.63) (Информация о драйвере: chromedriver = 2.8.240825, платформа = Linux 3.8.0-34-generic x86_64)'

Описание

При нажатии кнопки «Создать» элемент div вставляется в DOM (через JavaScript), отображая поля «Имя» и «Фамилия». При запуске с видимым окном я вижу, что элемент div ненадолго появляется перед тем, как исчезнуть, что приведет к сбою шагов «Я заполняю ...».

Из того, что я читал, проблема с сохранением фокуса на вновь созданном элементе div?

Попытки решения

  • ActionChains (world.browser) .move_to_element (кнопка) .click (). Perform ()
  • world.browser.switchTo () и друзья
  • world.browser.find_element (...). send_keys ("\ n")
  • sleep_until, implicitly_wait и т. д.

Окружающая среда

  • PyVirtualDisplay 0.1.2
  • Селен 2.38.4
  • Салат 0.2.19
  • Python 2.7.4
  • Lubuntu Linux 13.10

Исследования

Сохранение фокуса после открытия нового окна в Selenium IDE

Используя привязки Python, Selenium WebDriver щелкните ( ) иногда не работает.

Как переключиться в новое окно браузера, которое открывается после нажать на кнопку?

Selenium WebDriver ActionChains

реализация WebDriver.py

Selenium API


person Ben Crowhurst    schedule 07.01.2014    source источник


Ответы (1)


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

@step(u'I click the "(.*)" button')
def i_click_the_named_button(step, field):
    button = world.browser.find_element_by_xpath('(//a[contains(text(),"{0}") and not(contains(@style, "display:none"))] | //input[@value="{0}" and not(contains(@style, "display:none"))] | //li[contains(text(), "{0}") and not(contains(@style, "display:none"))])[1]'.format(field))
    button.click()
    time.sleep(1)
person Ben Crowhurst    schedule 13.01.2014
comment
После того, как я нажимаю на шаг, салат сразу вызывает следующий шаг, но браузер, возможно, еще не отрисовал новые элементы. Салат и селен могут работать быстрее, чем браузер. - person PukeCloud; 08.02.2014