Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • May 24 20:15

    asolntsev on gh-pages

    force users to reload the css (compare)

  • May 24 20:07

    asolntsev on gh-pages

    show donate link on all pages o… (compare)

  • May 24 19:47

    asolntsev on gh-pages

    update donation link for some … (compare)

  • May 24 19:37

    asolntsev on gh-pages

    released Selenide 6.5.1 (compare)

  • May 19 06:24

    asolntsev on gh-pages

    update wording (compare)

  • May 18 21:23

    asolntsev on gh-pages

    publish release notes for Selen… (compare)

  • May 17 13:12

    asolntsev on gh-pages

    add General Electric to Selenid… (compare)

  • May 12 19:54

    asolntsev on gh-pages

    add Raiffeisen bank to Selenide… (compare)

  • May 12 19:51

    asolntsev on gh-pages

    add Raiffeisen bank to Selenide… (compare)

  • May 12 19:42

    asolntsev on gh-pages

    add Perekrestok to Selenide use… (compare)

  • May 12 19:36

    asolntsev on gh-pages

    add CFT to Selenide users (compare)

  • May 11 06:47

    asolntsev on gh-pages

    fix link https://www.accenture.… (compare)

  • May 10 14:24

    asolntsev on gh-pages

    fix link tele2.ru doesn't resp… (compare)

  • May 10 08:00

    asolntsev on gh-pages

    add Accenture to Selenide users (compare)

  • May 09 15:57

    asolntsev on gh-pages

    add Rostelekom to Selenide users (compare)

  • May 09 15:48

    asolntsev on gh-pages

    add Encoding.com to Selenide us… (compare)

  • May 09 15:42

    asolntsev on gh-pages

    add G-Plans to Selenide users (compare)

  • May 07 08:15

    asolntsev on gh-pages

    add Lazada to Selenide users (compare)

  • May 06 06:43

    asolntsev on gh-pages

    add Tele2 to Selenide users (compare)

  • May 06 06:28

    asolntsev on gh-pages

    add SavvyMatics to Selenide use… (compare)

wasder
@wasder
"com.codeborne:selenide:5.5.0"
Anton Aftakhov
@simple-elf
в мавене мне форки помагали
но селенид в последних версиях тоже стал безопаснее с параллельными запусками работать
Вот даже статейка была https://ru.selenide.org/2019/12/09/advent-calendar-statics/
wasder
@wasder
да, я видел. но не думаю что тут проблема в сейф-тредах
Anton Aftakhov
@simple-elf
ну пробуйте форки и локально через хром драйвер провайдер
wasder
@wasder
все логи с ошибками выше - при запуске единичного теста
Anton Aftakhov
@simple-elf
А может еще какая то приколюха в методах чистки кэша
в селениде их вообще только 2, а вы зачем то юзаете WebDriverRunner еще
может он все и валит
wasder
@wasder
поставил BrowserPerTest и убрал чистку кэша, в итоге это помогло
спасибо
wasder
@wasder

Снова привет. Делаем тесты на апиуме с селенидом. Такая ошибка, когда перед тестом хотим запустить драйвер.

Configuration.browserCapabilities = desiredCapabilities;
Configuration.browser = IOSProvider.class.getName();
Configuration.timeout = 10000;
open();

https://gist.github.com/wasder/cfbf2e772250392176d0effa3411a11a

IOSProvider:

public class IOSProvider implements WebDriverProvider {
   @Override
   public WebDriver createDriver(DesiredCapabilities desiredCapabilities) {
   return new IOSDriver<MobileElement>((URL) desiredCapabilities.getCapability("serviceUrl"), desiredCapabilities);
   }

}
Версия селенида - 5.5.0
Andrei Solntsev
@asolntsev
Видишь, падает com.codeborne.selenide.webdriver.BrowserResizer.adjustBrowserSize(BrowserResizer.java:34)
Добавь Configuration.browserSize = null
wasder
@wasder
Это помогло. Спасибо!
Oleksandr Lezvinskyi
@getloud
У кого то была такая проблема?
Appium 1.16.0
appium java client 7.3.0
Selenide 5.6.1
Android 10 (Pixel)
Chromedriver 79.0.39
            capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
            capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, config().deviceName());
            capabilities.setCapability(MobileCapabilityType.UDID, config().udid());
            capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Chrome");
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions.setExperimentalOption("w3c", false);
            capabilities.merge(chromeOptions);
            capabilities.setCapability("automationName", "uiautomator2");
            capabilities.setCapability("chromedriverExecutable", "/usr/local/bin/chromedriver");
            capabilities.setCapability("appiumVersion", "1.16.0");
INFO: Detected dialect: W3C

org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: Could not proxy. Proxy error: Could not proxy command to remote server. Original error: Error: socket hang up
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'UKR-Oleksandr-L.local', ip: 'fe80:0:0:0:863:cd64:e760:93cb%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.15.3', java.version: '1.8.0_144'
Driver info: io.appium.java_client.AppiumDriver
selenide.url: https://www.seekingalpha.com
Capabilities {appActivity: com.google.android.apps.chr..., appPackage: com.android.chrome, appiumVersion: 1.16.0, automationName: uiautomator2, browserName: chrome, chromedriverExecutable: /usr/local/bin/chromedriver, databaseEnabled: false, desired: {appiumVersion: 1.16.0, automationName: uiautomator2, browserName: chrome, chromedriverExecutable: /usr/local/bin/chromedriver, deviceName: Pixel, goog:chromeOptions: {args: [], extensions: [], w3c: false}, newCommandTimeout: 180, platformName: android, udid: FA77S0307089}, deviceApiLevel: 29, deviceManufacturer: Google, deviceModel: Pixel, deviceName: FA77S0307089, deviceScreenDensity: 420, deviceScreenSize: 1080x1920, deviceUDID: FA77S0307089, goog:chromeOptions: {args: [], extensions: [], w3c: false}, javascriptEnabled: true, locationContextEnabled: false, networkConnectionEnabled: true, newCommandTimeout: 180, pixelRatio: 2.625, platform: LINUX, platformName: Android, platformVersion: 10, statBarHeight: 63, takesScreenshot: true, udid: FA77S0307089, viewportRect: {height: 1731, left: 0, top: 63, width: 1080}, warnings: {}, webStorageEnabled: false}
selenide.baseUrl: http://localhost:8080
Session ID: 9ab0719c-8002-4523-96ab-62c407519463

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
    at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:239)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
wasder
@wasder
Привет! Есть ли в селениде сейчас возможность использовать thread-safe конфиги? Нашел старый исус selenide/selenide#252 но он похоже так и не был решен.
Andrei Solntsev
@asolntsev
Прямо такого нет. Исходим из предположения, что в здоровой ситуации это не должно быть нужно.
Но нечто подобное реализовали в версии 5.0.0: https://ru.selenide.org/2018/10/10/selenide-5.0.0/
wasder
@wasder

У нас похоже не здоровая ситуация значит :). Пишем тесты на апиум под iOS, появилась необходимость их паралелить. паралельность достигается за счёт запуска на разных симуляторах, для этого апиуму нужно отправлять разные капабилити.
если запускать драйвер рекомендуемым способом:

Configuration.browserCapabilities = desiredCapabilities;
Configuration.browser = IOSProvider.class.getName();

то тогда первые тесты все ломятся на один симулятор и падают.

Andrei Solntsev
@asolntsev
Ну так если у вас свой провайдер, он может каждый раз создавать нужные капабилити.
Zahorodnii
@Zahorodnii
Всем привет, была ли идея сохранять локаторы в SelenideElements? Например $("someCss").getWrappedLocator(), public By getWrappedLocator() { ... }
Потому, что сейчас нужно писать костыли, в виде $("someCss").getWrappedElement().toString() и дальше парсить
Boris Osipov
@BorisOsipov
не понятно зачем они нужны? зачем получать через toString() и дальше парсить ?,
Zahorodnii
@Zahorodnii
например для перезагрузки елемента, у нас есть коллекция каких либо блоков со свойствами, делаем через map преобразование в коллецию каких либо объектов, коллекция перезагружаеться, ловим stale reference, её можно обработать с помощью AOP, и перезагрузить внутренний елемент
Andrei Solntsev
@asolntsev
Whaaaaaaaaat?
Zahorodnii
@Zahorodnii
сложно обьяснить, да)
я без понятия как показать, скрины вряд ли с проекта кидать буду
Andrei Solntsev
@asolntsev
Нет, я примерно понимаю, что вы делаете,
Но не понимаю - нафига такие сложности?
Zahorodnii
@Zahorodnii
сложности?
предлагаешь создавать заново тучу объектов, вместо того что бы перезагрузить элемент? так ведь перформанс просидает
Zahorodnii
@Zahorodnii
попробую объяснить, есть например GiftPageComponent принимающий giftItem в конструкторе, в GiftPageComponent методы аля getTitle() { giftItem.$("...") } и т.д., собираеться коллекция из GiftPageComponent-ов, мы чегото меняем, перезагружаем страницу или блок, ловим StaleReference, обрабатываем AOP, перезагружаем элемент. Что бы все работало нужно создавать и хранить какой то индетификатор по которому найду и перезагружу giftItem, когда мог бы просто сделать giftItem = $(giftItem.getWrappedLocator());
Boris Osipov
@BorisOsipov
можете сделать пример кода, хотя бы который даже не падает? я примерно понял что вы хотите, но я не понимаю как должно помочь giftItem = $(giftItem.getWrappedLocator()); - какая разница какой там элемент, перепоиск элемента сработать должен и без переприсваивания ссылки на новый элемент
я к тому что
1)element = driver.findElement("")
и
2)element = $("")
это не одно и тоже.
в первом случае, да всегда будет StaleReference на попытку element.findElement() при перезагружаем страницу или блок
во втором element.$("") должен перенайти элемент и не падать с StaleReference
Andrei Solntsev
@asolntsev
Именно. Селеридовский $() и так перегружает элемент. Не надо никаких aop.
Zahorodnii
@Zahorodnii
во втором element.$("") - а вот как раз таки падает, я бы с удовольствием не писал данный код, если бы не падало
и да, сразу скажу, селенид последней версии
Zahorodnii
@Zahorodnii

Именно. Селеридовский $() и так перегружает элемент. Не надо никаких aop.

Selenide.$("") и SelenideElemen.$("") имеют разную логику? Потому, что судя по всему SelenideElement.$("") не перезагружает

Andrei Solntsev
@asolntsev
Конечно перегружает. Да, у них одинаковая логика.
Andrei Solntsev
@asolntsev
Если у вас не так, заводите issue на гитхабе и наполняйте конкретикой: какая именно ошибка падает, код для воспроизведения и т.д.
Zahorodnii
@Zahorodnii
окей, спасибо
tanaka
@fresherr
не могу понять как прикрутить капабилити к дефолтному браузеру селениде
пробивал DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, "–disable-notifications");
Configuration.browserCapabilities = capabilities;
Andrei Solntsev
@asolntsev
@/all вы зарелизили Selenide 5.8.0!