Как нажать ионную кнопку с помощью PhantomJS и Selenium - PullRequest
0 голосов
/ 26 января 2019

У нас есть сторонний поставщик, который должен предоставлять нам данные в реальном времени, но не имеет никаких интерфейсов данных. Решение заключается в отражении данных веб-сайта в нашей системе. Их сайт построен с использованием Ionic.

Я уже создал функцию для зеркального отображения данных. Моя проблема на данный момент заключается в том, что текущие данные находятся на другой странице, но URL-адрес не меняет только источник страницы. В настоящее время я не могу получить данные в реальном времени, так как мне приходится нажимать кнопку Live Data на домашней странице.

Я использовал PhantomJS, чтобы попытаться программно нажать на кнопку, но по какой-то причине он не хочет работать. Проверена функциональность с домашней страницы Google и работает правильно.

Кто-нибудь знает, что я делаю неправильно или отсутствует? Я пробовал className, tagName и большинство элементов в dom, но все равно не повезло.

Вот источник сайта и мой код PhantomJS.

PS Сайт представляет собой локальный интерфейс устройства, и я использую сохраненный HTML-код для тестирования.

Веб-сайт Button Source

<button class="item item-block item-md" ion-item="" menuclose=""><ion-icon color="primary" item-left="" role="img" class="icon icon-md icon-md-primary ion-md-home item-icon" aria-label="home"></ion-icon><div class="item-inner"><div class="input-wrapper"><!----><ion-label class="label label-md">

                Home
            </ion-label></div><!----></div><div class="button-effect"></div></button><button class="item item-block item-md" ion-item="" menuclose=""><ion-icon color="primary" item-left="" role="img" class="icon icon-md icon-md-primary ion-md-list item-icon" aria-label="list"></ion-icon><div class="item-inner"><div class="input-wrapper"><!----><ion-label class="label label-md">

                Live Data
            </ion-label></div><!----></div><div class="button-effect"></div></button><button class="item item-block item-md" ion-item="" menuclose=""><ion-icon color="primary" item-left="" role="img" class="icon icon-md icon-md-primary ion-md-analytics item-icon" aria-label="analytics"></ion-icon><div class="item-inner"><div class="input-wrapper">

C # PhantomJS Код:

_driver.Manage().Window.Size = new Size(1000, 800);
_driver.Navigate().GoToUrl(url);
Thread.Sleep(3000);
//get the source of the page
Console.Write(_driver.PageSource);
//fully navigate the dom
var pathElements = _driver.FindElementsByTagName("button");
pathElements[1].Click();

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Я использовал общий PhantomJSDriver и определенный драйвер браузера.

Используя ChromeDriver и открыв веб-сайт в браузере, он работает сейчас.Я могу программно нажать кнопку и перейти к нужному источнику.

Кроме того, кнопка, которую я пытался нажать, находилась в боковом меню и не была видна.Использовал один из элементов в центре, и это заставило его работать.

Я уверен, что вы можете сделать это, не открывая браузер, но пока это будет работать, чтобы функционал работал.

0 голосов
/ 26 января 2019

Чтобы щелкнуть по нужному элементу с текстом Live Data , вам нужно вызвать WebDriverWait , и вы можете использовать следующее решение:

  • XPath:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//button[@class='item item-block item-md']//ion-label[@class='label label-md' and normalize-space()='Live Data']"))).Click();
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...