t.me/atinfo_chat Telegram группа по автоматизации тестирования

PhantomJSDriver не может нажать на кнопку

Теги: #<Tag:0x00007f74895e4408> #<Tag:0x00007f74895e4250> #<Tag:0x00007f74895e4048> #<Tag:0x00007f74895ebf28>

Добрый вечер. Такой вопрос, есть форма с парой кнопок и полем для ввода,
PhantomJSDriver видит эту форму и элементы на ней — Displayed = true,
может ввести значение, но не может нажимать на кнопки. Он какбы их жмет
т.к. ексепшен не выбрасывает, но страничка не меняется. Протестировал
этот случай на FirefoxDriver, код логики не менял, все нормально
нажимает. Можете подсказать какое-нибудь свойство или параметр в
настройках фантома, которое нужно прописать. Или хотябы подсказать в
каком направлении двигаться. Спасибо!

PhantomJS - это эмулятор, в целом его поведение отличается от реального браузера. Для простых страниц все может быть хорошо, но если много джава скрипта, могут быть проблемы
Гляньте тут - http://phantomjs.org/api/webpage/property/settings.html.
убедитесь что у вас включен Джава скрипт.

Потом сделайте скриншот после этого действия , пример тут
http://phantomjs.org/api/webpage/property/settings.html
посмотрите что происходит после клика.

Ну и лог было бы хорошо увидеть.

1 Симпатия

Спасибо за ответ. Пробовал с включенным и с выключеным джаваскриптом, результат один. Скриншот делал, изменений нету. Есть ньюанс - эту форму нам присылают пост запросом в ответ на нажатие кнопки.
Премного благодарен за ссылку!!!
Буду пробовать различные настройки)

Сложно судить наугад. Есть пример и код, который вы запускаете? Можно, хотя бы, минимальный рабочий пример.

Driver.FindElement(By.XPath(".//form[@id=‘BetSlipForm’]//li[@class=‘betslipHeader’]/a")).Enabled
true
Driver.FindElement(By.XPath(".//form[@id=‘BetSlipForm’]//li[@class=‘betslipHeader’]/a")).Displayed
true
хпас кнопки RemoveAll
https://mobile.bet365.com/#type=Coupon;key=2-101-20160715-20487515-57324307-0-0-0-4-0-0-4010-0-0-11-0-0-0-0-0-81;ip=0;lng=1;anim=1
нажимаете на любую лошадь, появляется форма ставки, вот с ней и проблема, ввести значение могу, но немогу нажимать на контролы.

Вот настройки фантома -

var driverService = PhantomJSDriverService.CreateDefaultService();
            driverService.HideCommandPromptWindow = true;
            driverService.SslProtocol = "any";
            driverService.IgnoreSslErrors = true;

var configOptions = new PhantomJSOptions();
            configOptions.AddAdditionalCapability("phantomjs.page.settings.loadImages", true);
            configOptions.AddAdditionalCapability("takesScreenshot", false);
            //configOptions.AddAdditionalCapability("elementScrollBehavior", 1);
            if (_webRequestInfo != null && !string.IsNullOrWhiteSpace(_webRequestInfo.UserAgent))
                configOptions.AddAdditionalCapability("phantomjs.page.settings.userAgent", _webRequestInfo.UserAgent);

IWebDriver Driver = new PhantomJSDriver(driverService, configOptions);
            Driver.Manage().Window.Size = new System.Drawing.Size(1920, 1080);

Так производится клик

private IWebElement GetElement(string xPath) {
            try {
                return Driver.FindElement(By.XPath(xPath));
            }
            catch (Exception e) {
                throw new PageScanException(string.Format("The PhantomWebDriver couldn't find element. {0}", e.Message), xPath);
            }
        }

        public bool Click(string xPath, Func<bool> callbackAfterClick) {
            GetElement(xPath).Click();
            return callbackAfterClick.Invoke();
        }

и еще вариант вот так

public bool ClickViaScript(string xPath, Func<bool> callbackAfterClick) {
                var element = GetElement(xPath);
                ((IJavaScriptExecutor)Driver).ExecuteScript("arguments[0].click()", element);
                return callbackAfterClick.Invoke();
     }

На мозиле драйвере все жмется обычным кликом.
Заранее спасибо!

в конфиге не увидела, чтобы включалась работа с джаваскриптом

Работа с джава скриптом активна по умолчанию, как видно из ссылок с первого ответа. Но пробовал вручную с ним и без, разницы нету.

configOptions.AddAdditionalCapability("javascriptEnabled", true);

Написал багрепорт на гитхаб тиме PhantomJS, они присвоили статус нуждается в тестировании, Если будет позитивный ответ, отпишусь. Спасибо.