Все XPaths возвращают несуществующую ошибку в CasperJS?

Просто чтобы быть ясно, я использую SpookyJS, которая является библиотекой, которая позволяет безголовый CasperJS.

Я могу просто щелкнуть и выбрать другие XPath-ы на всех других страницах, проблема только на конкретной странице, страница загружается идеально, но все XPath-сообщения возвращают эту ошибку.

Невозможно отправить событие mousedown на несуществующий селектор

У меня есть снимок экрана, сделанный до того, как функция пытается щелкнуть по xPath, и снимок экрана показывает, что страница загружена идеально.

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

Вот мой код в CoffeeScript не против spooky.then просто думать об этом как casper.then:

// 3 steps occur before this and they work perfectly
spooky.then([{x:selectXPath}, () ->
  @wait(3000, () ->
    eval(x) // This loads the xPath function
    @capture('server/components/spooky/img.png')
    @click(xPath('//*[@id="wp-page-header-middle"]/table/tbody/tr/td[1]/a'))
  )
])

Стол, который меня интересует, находится внутри фрейма.

1 ответ

Решение

Проблема в том, что элемент находится внутри iframe. Элемент может быть выбран, но сначала вам нужно переключиться в контекст iframe для запуска операций с ним. Это делается через withFrame(), Вы можете выбрать iframe по индексу или имени. Вот пример по индексу (первый iframe):

@withFrame(0, () ->
    @click(xPath('//*[@id="wp-page-header-middle"]/table/tbody/tr/td[1]/a'))
)

Вам также может понадобиться настроить XPath, потому что tbody может изначально отсутствовать в разметке. PhantomJS 1.x не добавляет его, как это делают современные браузеры, поэтому вам может потребоваться сделать это динамически:

'//*[@id="wp-page-header-middle"]/table//tr/td[1]/a'
Другие вопросы по тегам