Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

phantomjs
selenium
firefox
webdriver
Теги: #<Tag:0x00007f7b650f2f70> #<Tag:0x00007f7b650f2e30> #<Tag:0x00007f7b650f2cf0> #<Tag:0x00007f7b650f2bb0>

(Vasiliy Cherniatyn) #1

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


(Ilya G) #2

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

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

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


(Vasiliy Cherniatyn) #3

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


(Stan) #4

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


(Vasiliy Cherniatyn) #5

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();
     }

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


(Jane Tymoschuk) #6

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


(Vasiliy Cherniatyn) #7

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

configOptions.AddAdditionalCapability("javascriptEnabled", true);

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