LINUX.ORG.RU

11
Всего сообщений: 47

Проблемы с selenium на ubuntu server

Здравствуйте Запустил код на ubuntu server

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver=webdriver.Chrome('/home/kraken-bot/chromedriver', options=options)

driver.get('https://www.instagram.com/support_point/')

print(driver.title)
driver.quit()

сначала долго ждет, потом:

Traceback (most recent call last):
  File "test.py", line 9, in <module>
    driver=webdriver.Chrome('/home/kraken-bot/chromedriver', options=options)
  File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/chrome/webdriver.py", line 76, in __init__
    RemoteWebDriver.__init__(
  File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: DevToolsActivePort file doesn't exist

запускаю от root что делать? Зараннее спасибо

 , ,

AndreyPr ()

Selenium-webdriver не работает переключение по id

Столкнулся с неожиданным поведением Webdriver’a: При попытке передать константу в frame() в команде driver.switchTo().frame() Он выдаёт ошибку что id не может быть строкой. Хотя в документации селениума как раз передаётся строка и должно работать

https://imgur.com/oLGHFds - код

https://imgur.com/vC0B61p - ошибка

Есть идеи куда копать?

 ,

DJem ()

Тестирование: webdriver, chromedrive

Всем приветы!

У меня есть проект, который билдается с помощью npm, локально он запускается норм, суть его в том, что он подымает локально веб-сервер, открывает всякие там веб-странички в хроме и делает скриншоты. Задача вот в чем, что мне необходимо это дело запустить в докер контейнере, для этого я нашел готовый образ с хромом siomiz/chrome. Но скажу наперед- брал еще selenium-standalone-chrome. Но возникла проблема, когда пытаюсь заранать свой тест появляются следующие ошибки:

ChromeDriver was started successfully. [1596548096.697][SEVERE]: bind() failed: Cannot assign requested address (99)

[0-0] ERROR webdriver: Request failed due to unknown error: unknown error: Chrome failed to start: exited abnormally. (unknown error: DevToolsActivePort file doesn’t exist)

[0-3] Error: Failed to create session. unknown error: Chrome failed to start: exited abnormally. (unknown error: DevToolsActivePort file doesn’t exist) (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

Как я понимаю по ошибкам ChromeDriver не видит Chrome. В гугле попадались такие советы, добавить параметр для хрома если ранаете в докере –no-sandbox.

Может есть у кого опыт запуска тестов в докер контейнере, где стоит хром и сможет помочь решить данный вопрос? Буду рад и благодарен любому совету!

 , ,

wilsher ()

Дописать парсер к одному ресурсу

Ищу человека который допишет(в целом он уже готов возможно некоторые места просто немного костыльные) мой парсер на python к одному ресурсу. На данный момент основная проблема в том что я получаю блокировку по IP, при этом на данный момент я использую selenium+proxy+ ставлю кастомный user-agent НО все ровно получаю блокировку/капчу. Хотя если вбиваю данные прокси(предварительно очистив куки) себе в навигатор то как правило капчи нет и все открывается нормальо

ps: оплачу ТОЛЬКО по факту(в случае стабильной работы), согласен кинуть 1500р.

 , ,

Hex-Value ()

Ищу автотестеров на Java

Всем привет!

На данный момент нахожусь в поиске 2 крутых автотестировщиков (Java/ Selenium) в один из крупнейших e-commerce в России, предлагающий широкий выбор товаров класса люкс

ЗП - совокуп до 200 т.р.

Москва,офис в 3 минутах ходьбы от метро Охотный ряд/ Театральная, оформление в штат, фуллтайм, нужен опыт работы от 2,5 лет.

Проекты - Контент и Платформа(интернет-магазин).

Что есть?

  • Сложная многокомпонентная архитектура;

  • 15 приложений, большая часть которых не имеет пользовательского интерфейса;

  • Тысячи тестов: UI, Rest, SOAP, Daemons(Export&Import) etc.;

  • Ежедневная поставка билдов в бой.

  • Работа с инструментами автоматизации тестирования Java, Selenium;

  • Тестирование API и UI;

  • Создавать/поддерживать автотесты веб-интерфейса;

  • Разрабатывать и актуализировать автоматизированные тесты backend’a.

Гарантируется классная большая IT-команда и все плюшки, о которых вы знаете и не знаете)

Буду очень рада откликам и признательна за рекомендации!

Все расскажу, пишите здесь/телеграм - @nastyaklassnaya

 , , ,

anastasia9726 ()

Python SELENIUM webdriver.get(url) возможно ли что бы ссылки открывались в одном экземпляре браузера каждая в новой вкладе?

for i in range(len(result)): driver = webdriver.Chrome(../chromedriver) driver.get(result[i])

Сейчас каждая ссылка открывается в новом экземпляре браузера.

Возможно ли что бы ссылки открывались в одном экземпляре браузера каждая в новой вкладе?

какой браузер работает быстрее с selenium на ubuntu 19.10?

я заметил что у меня хром намного быстрее запускается и прогружает ссылки чем фаирфокс. Машина очень быстрая!

 ,

dkoss777 ()

Clojure: Как правильно добавлять зависимые исходники, пакеты, библиотеки в проект?

Здравствуйте! Пытаюсь сбилдить/запустить проект от статьи.
Пока безуспешно:

Building...
Warning: implicit hook found: lein-environ.plugin/hooks 
Hooks are deprecated and will be removed in a future version.
Compiling example-selenium-project.core
java.lang.RuntimeException: Unable to resolve symbol: gosuslugi-reg-form-webtest in this context, compiling:(example_selenium_project/core.clj:17:3)
Exception in thread "main" java.lang.RuntimeException: Unable to resolve symbol: gosuslugi-reg-form-webtest in this context, compiling:(example_selenium_project/core.clj:17:3)
	at clojure.lang.Compiler.analyze(Compiler.java:6688)
	at clojure.lang.Compiler.analyze(Compiler.java:6625)
	at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3766)
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6870)
	at clojure.lang.Compiler.analyze(Compiler.java:6669)
	at clojure.lang.Compiler.analyze(Compiler.java:6625)
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6001)
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6868)
	at clojure.lang.Compiler.analyze(Compiler.java:6669)
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6856)
	at clojure.lang.Compiler.analyze(Compiler.java:6669)
	at clojure.lang.Compiler.analyze(Compiler.java:6625)
	at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:6001)
	at clojure.lang.Compiler$FnMethod.parse(Compiler.java:5380)
	at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3972)
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6866)
	at clojure.lang.Compiler.analyze(Compiler.java:6669)
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6856)
	at clojure.lang.Compiler.analyze(Compiler.java:6669)
	at clojure.lang.Compiler.access$300(Compiler.java:38)
	at clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:589)
	at clojure.lang.Compiler.analyzeSeq(Compiler.java:6868)
	at clojure.lang.Compiler.analyze(Compiler.java:6669)
	at clojure.lang.Compiler.analyze(Compiler.java:6625)
	at clojure.lang.Compiler.compile1(Compiler.java:7469)
	at clojure.lang.Compiler.compile(Compiler.java:7541)
	at clojure.lang.RT.compile(RT.java:406)
	at clojure.lang.RT.load(RT.java:451)
	at clojure.lang.RT.load(RT.java:419)
	at clojure.core$load$fn__5677.invoke(core.clj:5893)
	at clojure.core$load.invokeStatic(core.clj:5892)
	at clojure.core$load.doInvoke(core.clj:5876)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.core$load_one.invokeStatic(core.clj:5697)
	at clojure.core$compile$fn__5682.invoke(core.clj:5903)
	at clojure.core$compile.invokeStatic(core.clj:5903)
	at clojure.core$compile.invoke(core.clj:5895)
	at user$eval20$fn__29.invoke(form-init11221676142724393593.clj:1)
	at user$eval20.invokeStatic(form-init11221676142724393593.clj:1)
	at user$eval20.invoke(form-init11221676142724393593.clj:1)
	at clojure.lang.Compiler.eval(Compiler.java:6927)
	at clojure.lang.Compiler.eval(Compiler.java:6917)
	at clojure.lang.Compiler.eval(Compiler.java:6917)
	at clojure.lang.Compiler.load(Compiler.java:7379)
	at clojure.lang.Compiler.loadFile(Compiler.java:7317)
	at clojure.main$load_script.invokeStatic(main.clj:275)
	at clojure.main$init_opt.invokeStatic(main.clj:277)
	at clojure.main$init_opt.invoke(main.clj:277)
	at clojure.main$initialize.invokeStatic(main.clj:308)
	at clojure.main$null_opt.invokeStatic(main.clj:342)
	at clojure.main$null_opt.invoke(main.clj:339)
	at clojure.main$main.invokeStatic(main.clj:421)
	at clojure.main$main.doInvoke(main.clj:384)
	at clojure.lang.RestFn.invoke(RestFn.java:421)
	at clojure.lang.Var.invoke(Var.java:383)
	at clojure.lang.AFn.applyToHelper(AFn.java:156)
	at clojure.lang.Var.applyTo(Var.java:700)
	at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: Unable to resolve symbol: gosuslugi-reg-form-webtest in this context
	at clojure.lang.Util.runtimeException(Util.java:221)
	at clojure.lang.Compiler.resolveIn(Compiler.java:7164)
	at clojure.lang.Compiler.resolve(Compiler.java:7108)
	at clojure.lang.Compiler.analyzeSymbol(Compiler.java:7069)
	at clojure.lang.Compiler.analyze(Compiler.java:6648)
	... 57 more
Compilation failed: Subprocess failed

=== Finished ===

Ну ок, иду в example_selenium_project/core.clj и дописываю сверху: (:use 'example-selenium-project.tests/gosuslugi_reg)
получаю:

Building...
Warning: implicit hook found: lein-environ.plugin/hooks 
Hooks are deprecated and will be removed in a future version.
Compiling example-selenium-project.core
java.io.FileNotFoundException: Could not locate gosuslugi_reg__init.class or gosuslugi_reg.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name., compiling:(core.clj:1:1)
Exception in thread "main" java.io.FileNotFoundException: Could not locate gosuslugi_reg__init.class or gosuslugi_reg.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name., compiling:(core.clj:1:1)
	at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3657)
	at clojure.lang.Compiler.compile1(Compiler.java:7474)
	at clojure.lang.Compiler.compile1(Compiler.java:7464)
	at clojure.lang.Compiler.compile(Compiler.java:7541)
	at clojure.lang.RT.compile(RT.java:406)
	at clojure.lang.RT.load(RT.java:451)
	at clojure.lang.RT.load(RT.java:419)
	at clojure.core$load$fn__5677.invoke(core.clj:5893)
	at clojure.core$load.invokeStatic(core.clj:5892)
	at clojure.core$load.doInvoke(core.clj:5876)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.core$load_one.invokeStatic(core.clj:5697)
	at clojure.core$compile$fn__5682.invoke(core.clj:5903)
	at clojure.core$compile.invokeStatic(core.clj:5903)
	at clojure.core$compile.invoke(core.clj:5895)
	at user$eval20$fn__29.invoke(form-init2435441898276497752.clj:1)
	at user$eval20.invokeStatic(form-init2435441898276497752.clj:1)
	at user$eval20.invoke(form-init2435441898276497752.clj:1)
	at clojure.lang.Compiler.eval(Compiler.java:6927)
	at clojure.lang.Compiler.eval(Compiler.java:6917)
	at clojure.lang.Compiler.eval(Compiler.java:6917)
	at clojure.lang.Compiler.load(Compiler.java:7379)
	at clojure.lang.Compiler.loadFile(Compiler.java:7317)
	at clojure.main$load_script.invokeStatic(main.clj:275)
	at clojure.main$init_opt.invokeStatic(main.clj:277)
	at clojure.main$init_opt.invoke(main.clj:277)
	at clojure.main$initialize.invokeStatic(main.clj:308)
	at clojure.main$null_opt.invokeStatic(main.clj:342)
	at clojure.main$null_opt.invoke(main.clj:339)
	at clojure.main$main.invokeStatic(main.clj:421)
	at clojure.main$main.doInvoke(main.clj:384)
	at clojure.lang.RestFn.invoke(RestFn.java:421)
	at clojure.lang.Var.invoke(Var.java:383)
	at clojure.lang.AFn.applyToHelper(AFn.java:156)
	at clojure.lang.Var.applyTo(Var.java:700)
	at clojure.main.main(main.java:37)
Caused by: java.io.FileNotFoundException: Could not locate gosuslugi_reg__init.class or gosuslugi_reg.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name.
	at clojure.lang.RT.load(RT.java:456)
	at clojure.lang.RT.load(RT.java:419)
	at clojure.core$load$fn__5677.invoke(core.clj:5893)
	at clojure.core$load.invokeStatic(core.clj:5892)
	at clojure.core$load.doInvoke(core.clj:5876)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at clojure.core$load_one.invokeStatic(core.clj:5697)
	at clojure.core$load_one.invoke(core.clj:5692)
	at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
	at clojure.core$load_lib.invokeStatic(core.clj:5736)
	at clojure.core$load_lib.doInvoke(core.clj:5717)
	at clojure.lang.RestFn.applyTo(RestFn.java:142)
	at clojure.core$apply.invokeStatic(core.clj:648)
	at clojure.core$load_libs.invokeStatic(core.clj:5778)
	at clojure.core$load_libs.doInvoke(core.clj:5758)
	at clojure.lang.RestFn.applyTo(RestFn.java:137)
	at clojure.core$apply.invokeStatic(core.clj:650)
	at clojure.core$use.invokeStatic(core.clj:5860)
	at clojure.core$use.doInvoke(core.clj:5860)
	at clojure.lang.RestFn.invoke(RestFn.java:408)
	at example_selenium_project.core$loading__5569__auto____36.invoke(core.clj:1)
	at clojure.lang.AFn.applyToHelper(AFn.java:152)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3652)
	... 35 more
Compilation failed: Subprocess failed

=== Finished ===

Скрин проекта с подсвеченным проблемным местом
ЧЯДНТ?

 ,

Eid010n ()

Правильные setCapability для запуска chrome в android

Тестирую этот проект https://github.com/aerokube/demo-tests

Запущенные контейнеры

 docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                    NAMES
ffd64121947a        aerokube/selenoid:latest      "/usr/bin/selenoid -…"   3 days ago          Up 3 days           0.0.0.0:4444->4444/tcp   selenoid
c7c74a3b6589        aerokube/selenoid-ui:latest   "/selenoid-ui --sele…"   3 days ago          Up 3 days           0.0.0.0:8080->8080/tcp   selenoid-ui

Логи ffd64121947a

docker logs ffd64121947a
2019/12/02 12:16:03 [3258] [LOCATING_SERVICE] [chrome] [6.0]
2019/12/02 12:16:03 [3258] [ENVIRONMENT_NOT_AVAILABLE] [chrome] [6.0]

browsers.json:

{
    "android": {
        "default": "6.0",
        "versions": {
            "6.0": {
                "image": "nexus/selenoid/android:6.0",
                "port": "4444",
                "path": "/wd/hub"
            }
        }
    },
    "chrome": {
        "default": "78.0",
        "versions": {
            "78.0": {
                "image": "nexus/selenoid/chrome:78.0",
                "port": "4444",
                "path": "/"
            }
        }
    }
}

Прокси поправил

package com.aerokube.selenoid;

import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.io.File;
import java.net.URL;

import static com.aerokube.selenoid.Screenshot.takeScreenshot;

public class DemoTest {

    private RemoteWebDriver driver;

    @Before
    public void openDriver() throws Exception {
        Proxy proxy = new Proxy();
        proxy.setSslProxy("http://proxy:3128");
        final DesiredCapabilities browser = DesiredCapabilities.chrome();
        browser.setCapability("deviceName", "android");
        browser.setCapability("version", "6.0");
        browser.setCapability("appPackage", "com.android.chrome");
        browser.setCapability("appActivity", "com.google.android.apps.chrome.Main");
        browser.setCapability("proxy", proxy);
        browser.setCapability("enableVideo", true);
        browser.setCapability("enableLog", true);
        browser.setCapability("enableVNC", true);
        driver = new RemoteWebDriver(new URL(
                "http://localhost:4444/wd/hub" //Replace with correct host and port
        ), browser);
    }

    @Test
    public void browserTest() throws Exception {
        try {
            driver.get("https://duckduckgo.com/");
            WebElement input = driver.findElement(By.cssSelector("input#search_form_input_homepage"));
            input.sendKeys(Keys.chord("selenium", Keys.ENTER));
        } finally {
            takeScreenshot(driver);
        }

    }

    @After
    public void closeDriver(){
        if (driver != null){
            driver.quit();
            driver = null;
        }
    }
}


Пишет:

Tests in error: 
  browserTest(com.aerokube.selenoid.DemoTest): Requested environment is not available (WARNING: The server did not provide any stacktrace information)

Как исправить ошибку?

 

chemtech ()

Минcк, Middle/Senior QA, $2000

Минск, позавчера нужен мидл или сеньор QA (автоматизация мастхэв)

Аутсорс с более-менее лицом, проект долгоиграющий и довольно большой, feature-команда, процессы налажены, садись и работай. CI/CD, автоматизация, webdriver, restsharp, небольшая команда приручённых разработчиков, scrum, отэтавсё.

По технологиям – продукт мелкософтовский, тесты – C#, CI в Azure Devops, тесты там же. На рабочем компе можете иметь хоть гейось, хоть linux, жить это не особо мешает.

По требованиям – хоть какой-то опыт в автоматизации вебни, знание C#, английский, понимание что куда прикладывается в QA. Опыт работы с MSовским стэком – большой плюс.

Ищу на своё место, перед уходом всё покажу-расскажу, экскурсию по офису устрою, кресло нагрею. По деньгам – зависит от попадания в вакансию, как минимум рынок дадут (в заголовке средняя с dev.by, да). Страховка, печеньки – как везде, контора ПВТшная, всё белое, график человеческий, овертаймы не в ходу. Не опенспейс, матом в кабинете ругаться можно.

xmpp: brat_radist@jabber.ru, телега: @pavelse16, телега предпочтительнее, особенно в нерабочее время

 , , ,

a769023c ()

Как на python через Selenium создать нормальный профиль Firefox?

Как на python через Selenium создать нормальный профиль Firefox?
Нужен именно нормальный профиль, сохраняемый на диск, а не пустой анонимный как при обычном старте.

 , ,

Qwentor ()

Firefox + Selenium. Что я делаю не так?

import os
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = True

gecko = os.path.normpath(os.path.join(os.path.dirname(__file__), 'firefox', 'geckodriver'))
binary = FirefoxBinary(r'/home/qwentor/firefox/firefox-bin')

driver = webdriver.Firefox(firefox_binary=binary, executable_path=gecko, options=options)

driver.close()




выдает ошибку:

Traceback (most recent call last):
  File "testbrowser2.py", line 14, in <module>
    driver = webdriver.Firefox(firefox_binary=binary, executable_path=gecko, options=options)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
    keep_alive=True)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: invalid argument: can't kill an exited process


Что не так?
chmod +x фоксу и гекодрайверу сделал
Система Ubuntu 18.04

 , ,

Qwentor ()

Сохранить страницу подменив динамические вызовы

Ситуация такая. Есть некое веб приложение от IBM, использующее dojo для генерации страниц. И есть фреймворк для тестирования этого приложения (который использует Selenium).

Теперь нужно протестировать сам фреймворк. Для этого страницы приложения сохраняются статически, и вызываются потом юнит-тестами.

К сожалению, страницы довольно сложные (100K+ строк кода) и если их сохранить в Firefox -> Save Page As -> Complete Page и восстановить - выглядят зачастую не так как в онлайне.

Нету ли какого-нибудь инструмента, который бы при сохранении все вызовы веб-сервисов заменять содержимым последнего вызова? Чтобы сохраненная страница была полностью автономна?

Моё гугл-фу тут слабовато: находятся результаты как тестировать с помощью селениума, а мне по существу нужно тестировать сам селениум с обвязкой.

 , , ,

alt-x ()

Получить информацию об SSL сертификате используя NightWatch

При автоматизированном тестировании встала задача получить информацию об используемом на сайте SSL сертификате. Для тестирования использую selenium, «безголовый» chromedriver и nightwatch js. Вот часть параметров моего nightwatch.json файла:

"desiredCapabilities": {
"browserName": "chrome",
"acceptSslCerts": true,
"javascriptEnabled": true,
"acceptInsecureCerts": true,
"disablewebsecurity": true,
"allowrunninginsecurecontent": true,
"cssSelectorsEnabled": true
}
Вот простенький пример после чего надо выполнить проверку информации:
 'Opening site using Selenium': function (browser) {
    browser
      .url('https://my_site.com')
      .waitForElementPresent('body', 200000, 'URL %s open');
Сайт открывается, но никак не могу придумать/нагуглить как получить любую информацию о сертификате. Ведь, если сайт https открывается, значит там должен быть сертификат. Есть какие-либо идеи? Заранее спасибо!

 , , ,

iOlegKV ()

Запуск скриптов в docker контейнере через ansible

Есть необходимость запускать тестовые скрипты. На серваке установил docker и ansible. Цель - запускать через Jenkins на этом серваке контейнеры и в одном из них скрипты, но я пока остановился на схеме без Jenkins, потому что уже есть некоторые вопросы. Написал playbook, который запускает три контейнера - selenium, chromedriver (безголовый браузер) и nightwatch (node.js и, если это важно, он является ENTRYPOINT). Контейнеры запускаются, но команда (command) внутри nightwatch не выполняется/не запускается даже. Вот playbook:

- name: Docker-compose
  hosts: localhost
  connection: local
  gather_facts: no
  tasks:

    - name: Start selenium hub
      docker_container:
        name: hub
        image: localhost/tests/selenium:latest
        state: started
        restart: yes
        ports:
          - "4444:4444"

    - name: Start chromedriver
      docker_container:
        name: chromedriver
        image: localhost/tests/chromedriver:latest
        state: started
        restart: yes
        links:
          - "hub:hub"
        env:
            VNC_ENABLED: true
            EXPOSE_X11: true
        ports:
          - "5900:5900"

    - name: Start nightwatch
      docker_container:
        name: nightwatch
        image: localhost/tests/nightwatch:latest
#        init: yes
        state: started
        env:
            WAIT_FOR_HOSTS: chromedriver:4444
        volumes: ./test:/home/node
        command: nightwatch --test run/test-google.js
В папке test (которая становится общей для ОС и контейнера) есть папка run, где и лежат скрипты. Запускал playbook с ключами -vvv, но никаких явных ошибок, говорящих что-либо о запуске команды в контейнере не видно. Вот файл nightwatch.json:
{
  "globals_path": "globals.js",
  "output_folder": "reports",
  "src_folders": ["run"],
  "test_settings": {
    "default": {
      "selenium_host"  : "chromedriver",
      "screenshots": {
        "enabled": true,
        "on_failure": true,
        "on_error" : false,
        "path": "screenshots"
      },

      "desiredCapabilities": {
        "browserName": "chrome",
        "javascriptEnabled": true,
        "acceptSslCerts": true,
        "cssSelectorsEnabled": true
      }
    },
    "google" : {
      "launch_url" : "http://www.google.ru",
      "filter" : "*-google.js"
    }
  }
}
Есть ли те, кто может помочь или направить на путь истинный?

 , , ,

iOlegKV ()

Не могу замаскировать символ '

Как замаскировать этот символ?

driver.find_elements_by_xpath("//*[contains(text(), 'Ne\'xt')]")[0].click()

Выдаёт

selenium.common.exceptions.InvalidSelectorException: Message: Given xpath expression "//*[contains(text(), 'Ne'xt')]" is invalid: SyntaxError: The expression is not a legal expression.

 , ,

steemandlinux ()

selenium не обновляет PageSource без пересоздания webdriver-a

Просветите нуба, это так и задумано или это я рукожоп? Суть такова: попросили набыдлокодить утилитку, которая мониторит сберовскую карту и, при поступлении на нее средств, переводит их на другую карту. Вспомнив недавно мелькавший здесь скрипт, решил взять selenium, чтобы не морочиться с авторизацией. Взял. Вроде все хорошо, по страничкам бегает как надо, только при этом суммы на картах не меняются до пересоздания webdriver-а.

...
driver.get("https://node1.online.sberbank.ru/PhizIC/private/cards/info.do?id=XXXXXXXX");
...
while (true) {
Thread.sleep(40000);
driver.navigate().refresh();
Thread.sleep(5000);
count = driver.findElement(By.xpath("//span[@class='detailAmount nowrap']"));
...
}
...
count при этом не меняется. Да и, если выключить headless, видно, что цифры на страничке тоже прежние.

При этом если произвести перевод вебдрайвером, то цифры обновляются. Есть стойкое ощущение, что я что-то делаю не так или не тем.

 , , ,

kravzo ()

Запилил говноскрипт на перле, чтоб посмотреть как там дела на сберовских картах

Проверял с ФФ/geckodriver и selenium-server-standalone.

Поставить нужно

- selenium-server-standalone 3.12.0-1

- perl-selenium-remote-driver 1.28-1

- geckodriver 0.20.1-1

ну и файрфокс.

java -jar /usr/share/selenium-server/selenium-server-standalone.jar
#!/usr/bin/perl -w
#
# Dump sberbank card list and payments history
#
# Usage:
#   $0 <login> <password>
#

use utf8;
use Selenium::Remote::Driver;

$login = shift @ARGV;
$password = shift @ARGV;

binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");

print STDERR "Starting browser\n";
my $driver = Selenium::Remote::Driver->new_from_caps(
	'desired_capabilities' => {
		'browserName' => 'firefox',
		'moz:firefoxOptions' => {
			'args' => [ '--safe-mode', '--headless' ]
#			'args' => [ '--safe-mode' ]
		}
	});

print STDERR "Logging in\n";
$driver->get('https://online.sberbank.ru/CSAFront/index.do');
$driver->find_element_by_id('login')->send_keys($login);
$driver->find_element_by_id('password')->send_keys($password);
$driver->get('javascript:validateAndSubmit()');

print STDERR "Getting info";
my @products = ();
while(scalar @products == 0) {
	@products=$driver->find_elements("//div[\@class='forProductBorder mainProductInfo']");
	sleep(1);
	print STDERR ".";
}
print STDERR "\n";

$driver->get('https://node1.online.sberbank.ru/PhizIC/private/cards/list.do');
print STDERR "Getting info";
@products = ();
while(scalar @products == 0) {
	@products=$driver->find_elements("//div[\@class='productCover activeProduct ']");
	sleep(1);
	print STDERR ".";
}
print STDERR "\n";

my %products = ();
foreach $p (@products) {
	$name_el=$driver->find_child_element($p, "./div//span[\@class='mainProductTitle mainProductTitleLight']");
	$name=$name_el->get_text();
	$open=$name_el->get_attribute('onclick', 1);
	$amount=$driver->find_child_element($p, "./div//span[\@class='overallAmount nowrap']")->get_text();
	$number=$driver->find_child_element($p, "./div//div[\@class='accountNumber decoration-none']")->get_text();
	if($number =~ / (\d{4}),/) {
		$n = "card#".$1;
	} else {
		$n = "rand#".int(rand(10000)); # TODO: fixme
	}
	$products{$n}{'number'} = $number;
	$products{$n}{'amount'} = $amount;
	$products{$n}{'open'} = $open;
	$products{$n}{'name'} = $name;
	print "$name = $amount\n\t$number\n\t$open\n";
}
print "\n\n";

foreach $p (keys %products) {
	$open = $products{$p}{'open'};
	$name = $products{$p}{'name'};
	$driver->get("javascript:".$open);
	print STDERR "Getting history for $p ($name)";
	my @history = ();
	while(scalar @history == 0) {
		@history=$driver->find_elements("//table[\@class='tblInf']");
		sleep(1);
		print STDERR ".";
	}
	print STDERR "\n";
	sleep(2); # TODO: fix this hack!
	$history=$driver->find_element("//table[\@class='tblInf']");
	@items=$driver->find_child_elements($history, "./tbody//tr[\@class='ListLine0'] | ./tbody//tr[\@class='ListLine1']");
	foreach $i (@items) {
		$name=$driver->find_child_element($i, "./td[\@class='align-left leftPaddingCell']")->get_text();
		$date=$driver->find_child_element($i, "./td[\@class='listItem']")->get_text();
		$amount=$driver->find_child_element($i, "./td[\@class='align-right']")->get_text();
		print "\t$date, $amount, $name\n";
	}
	print "\n\n";
}

print STDERR "Quit\n";
$driver->quit();

 , , , ,

sergej ()

Скрипт python для Selenium

Коллеги, доброго дня. Есть скрипт для генерации временной лицензии для conflunce:

from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re


driver = webdriver.Firefox()
driver.get("https://id.atlassian...atlassian.com")
driver.find_element_by_id("username").send_keys("MY_NAME@XX.ru")
driver.find_element_by_id("form-login").submit()
time.sleep(10)
driver.find_element_by_id("login-submit").click()
driver.find_element_by_id("password").clear()
driver.find_element_by_id("password").send_keys("MY_PASSWORD")
driver.find_element_by_id("login-submit").click()
time.sleep(20)
driver.find_element_by_link_text("New Evaluation License").click()
driver.find_element_by_id("product-select").click()
Select(driver.find_element_by_id("product-select")).select_by_visible_text("Confluence")
driver.find_element_by_xpath("//option[@value='Confluence']").click()
driver.find_element_by_xpath("//div[@id='content']/div/div/div/form/fieldset/div[2]/div/label[2]/span[3]").click()
driver.find_element_by_id("serverid").click()
driver.find_element_by_id("serverid").clear()
driver.find_element_by_id("serverid").send_keys("XXX-XXX-XXX-XXX")
driver.find_element_by_id("generate-license").click()

Лицензия генерится нормально.

Теперь мне необходимо скопировать полученную лицензию и вставить в новое место:

Но у поля сгенерированной лицензии id получается динамический и он будет менять каждый раз при генерации.

Вопрос 1 - как правильно скопировать данные из этого поля.

Вопрос 2 - как правильно вставить эти данные и новое место. Всю голову сломал, прошу подскажите.

 , ,

lucidlynx ()

Selenium, Firefox и SVG

Пытаюсь получить «скриншот» SVG изображения через headless firefox, но на выходе получаю файл размером 0 байт. При этом локальный html рисует нормально.

Код:

var webdriver = require('selenium-webdriver'),
    By = webdriver.By,
    until = webdriver.until;
var fs = require('fs');

var firefox = require('selenium-webdriver/firefox');

var firefoxOptions = new firefox.Options();
firefoxOptions.setBinary('/usr/bin/firefox');
firefoxOptions.headless();

var driver = new webdriver.Builder()
    .forBrowser('firefox')
    .setFirefoxOptions(firefoxOptions)
    .build();


driver.get('file:///home/razr/test.svg');

webdriver.WebDriver.prototype.saveScreenshot = function(filename) {
    return driver.takeScreenshot().then(function(data) {
        console.log(data) // empty
        fs.writeFile(filename, data.replace(/^data:image\/png;base64,/,''), 'base64', function(err) {
            if(err) throw err;
        });
    })
};

driver.saveScreenshot('out.png');

driver.quit();

Я во всём этом вебе ноль, поэтому вообще хз что не так. Ошибок никаких не выдаёт.

Firefox 58.0.1

selenium-webdriver 3.6.0

geckodriver-v0.19.1-linux64

 , , ,

RazrFalcon ()

Прошу помощи у тех кто знаком с selenium веб драйвером

есть вот такой код:


    # -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
from selenium.webdriver.chrome.options import Options
import unittest, time, re

class UntitledTestCase(unittest.TestCase):
    
    def setUp(self):
        chrome_options = Options()
        self.driver = webdriver.Chrome(executable_path='/путь/chromedriver',chrome_options=chrome_options)
        self.driver.implicitly_wait(300)
        self.driver.set_page_load_timeout(300)

    
    
    def test_untitled_test_case(self):
        driver = self.driver
        driver.get("адрес")
        driver.find_element_by_id("ид1").click()
        driver.find_element_by_id("ид2").click()
        
    
    
    def tearDown(self):
        self.driver.quit()
      
if __name__ == "__main__":
    unittest.main()

все в принципе работает кроме одного , selenium запускает хром с кучей параметров которые ограничивают работу сайта и мешают тестированию,как отключить эти параметры ? пытался их удалять через chrome_options.arguments.remove и не только , все бестолку....

 , , ,

echo_ ()