Все 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'