Перейти к содержимому

Фотография

Скрипт Python для Selenium


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 lucidlynx

lucidlynx

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Andrey Kuzmin

Отправлено 26 марта 2018 - 09:41

Коллеги, доброго дня.

Помогите понять, правильно ли составил скрипт, сейчас он разделен на две части: 1 - логин  в личный кабинет. 2 - Поиск ссылки на странице.

Если выполнит первую часть скрипта (##Login site) , выполняется без ошибок (по крайней мере в консоли ничего нет), если добавить вторую часть (## Search link)\

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

Unable to locate element: https://marketplace.atlassian.com/
Подскажите что я делаю не правильно.

И второй вопрос, как можно залогировать прохождение скрипта, например сделал это и это, а вот тут упал.

Стоит на теством сервере: python 2.7, selenium 3.11.0, geckodrive 0.20/

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

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException

##Login site

browser = webdriver.Firefox()
browser.get('https://my.atlassian.com')
browser.find_element_by_id('username').send_keys('My_Login@bk.ru')
time.sleep(5)
browser.find_element_by_id('login-submit').click
time.sleep(5)
browser.find_element_by_class_name('gcfMkP').send_keys('My_Password')
time.sleep(7)
browser.find_element_by_id('login-submit').click

## Search link
test = browser.find_element_by_link_text('https://marketplace.atlassian.com/').text

print(test)
browser.close()


  • 0

#2 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 26 марта 2018 - 10:03

Скрипт говорит, что не может найти такой элемент.
by_link_text - это по видимому тексту ссылки, например, Marketplace, а не по урлу.
  • 0

#3 lucidlynx

lucidlynx

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Andrey Kuzmin

Отправлено 26 марта 2018 - 10:13

Скрипт говорит, что не может найти такой элемент.
by_link_text - это по видимому тексту ссылки, например, Marketplace, а не по урлу.

Добрый день!

Попробовал сделать поменять на Marketplace, ситуация та же самая, не может найти элемент.

Так же пробовал test = browser.find_element_by_partial_link_text('Marketplace').text, та же самая песня.

У меня такое ощущение что, у меня первая часть не выполнилась.


  • 0

#4 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 26 марта 2018 - 11:41

таймаут после сабмита вам нужен, но это не тру.


  • 0

#5 lucidlynx

lucidlynx

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Andrey Kuzmin

Отправлено 26 марта 2018 - 12:08

таймаут после сабмита вам нужен, но это не тру.

Пробовал уже) не выходит.


  • 0

#6 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 26 марта 2018 - 12:48

Попробовал сделать поменять на Marketplace, ситуация та же самая, не может найти элемент.

Так же пробовал test = browser.find_element_by_partial_link_text('Marketplace').text, та же самая песня.

У меня такое ощущение что, у меня первая часть не выполнилась.

 

Возможно.
а скрее всего - локатор неправильный.

А какой правильный - я не знаю, не логинился внутрь аккаунта.


  • 0

#7 lucidlynx

lucidlynx

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Andrey Kuzmin

Отправлено 26 марта 2018 - 13:01

 

Попробовал сделать поменять на Marketplace, ситуация та же самая, не может найти элемент.

Так же пробовал test = browser.find_element_by_partial_link_text('Marketplace').text, та же самая песня.

У меня такое ощущение что, у меня первая часть не выполнилась.

 

Возможно.
а скрее всего - локатор неправильный.

А какой правильный - я не знаю, не логинился внутрь аккаунта.

 

А как правильно определить локатор?


  • 0

#8 BadMF

BadMF

    Специалист

  • Members
  • PipPipPipPipPip
  • 809 сообщений
  • ФИО:Dmitry Petrov

Отправлено 27 марта 2018 - 05:09

 

 

Попробовал сделать поменять на Marketplace, ситуация та же самая, не может найти элемент.

Так же пробовал test = browser.find_element_by_partial_link_text('Marketplace').text, та же самая песня.

У меня такое ощущение что, у меня первая часть не выполнилась.

 

Возможно.
а скрее всего - локатор неправильный.

А какой правильный - я не знаю, не логинился внутрь аккаунта.

 

А как правильно определить локатор?

 

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


  • 0

#9 lucidlynx

lucidlynx

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Andrey Kuzmin

Отправлено 27 марта 2018 - 06:35

 

 

 

Попробовал сделать поменять на Marketplace, ситуация та же самая, не может найти элемент.

Так же пробовал test = browser.find_element_by_partial_link_text('Marketplace').text, та же самая песня.

У меня такое ощущение что, у меня первая часть не выполнилась.

 

Возможно.
а скрее всего - локатор неправильный.

А какой правильный - я не знаю, не логинился внутрь аккаунта.

 

А как правильно определить локатор?

 

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

 

Всем огромное спасибо.. Разобрался сам. Если интересно могу прислать то что получилось


  • 0

#10 lucidlynx

lucidlynx

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Andrey Kuzmin

Отправлено 27 марта 2018 - 07:39

Коллеги, вот мой скрипт, который логиниться на сайт и создает временную лицензию:

 

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 - как правильно вставить эти данные и новое место

 

Прикладываю скрин страницы:

h_1522136728_6415096_1993a56796.png


  • 0

#11 lucidlynx

lucidlynx

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Andrey Kuzmin

Отправлено 28 марта 2018 - 10:19

В общем разобрался сам. Всем спасибо:

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

##LOGIN
driver = webdriver.Firefox()
driver.get("https://id.atlassian.com/login?application=mac&continue=https://my.atlassian.com")
driver.find_element_by_id("username").send_keys("MYNAME@MYDOMAIN.RU")
driver.find_element_by_id("form-login").submit()
time.sleep(20)
driver.find_element_by_id("login-submit").click()
driver.find_element_by_id("password").clear()
driver.find_element_by_id("password").send_keys("MYPASSWORD")
driver.find_element_by_id("login-submit").click()
time.sleep(20)

#GENERATE LICENSE
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("SERVERID")
driver.find_element_by_id("generate-license").click()

#SEARCH LICENESE KEY
time.sleep(20)
#
elem = driver.find_element_by_xpath("//textarea[contains(@id, 'licensebox')]").text
# print(elem)

#ADD NEW LICENCE TO CONFLUENCE
driver.get("http://CONFLUENCE.MY_DOMAIN.RU")
time.sleep(10)
driver.find_element_by_id("os_username").clear()
driver.find_element_by_id("os_username").send_keys("USER")
driver.find_element_by_id("os_password").clear()
driver.find_element_by_id("os_password").send_keys("PASSWORD")
driver.find_element_by_name("loginform").submit()
time.sleep(15)
driver.find_element_by_id("admin-menu-link").click()
driver.find_element_by_id("administration-link").click()
driver.find_element_by_id("password").click()
driver.find_element_by_id("password").clear()
driver.find_element_by_id("password").send_keys("PASSWORD")
time.sleep(15)
driver.find_element_by_name("authenticateform").submit()
time.sleep(5)
driver.find_element_by_link_text("License Details").click()
time.sleep(5)
driver.find_element_by_name("licenseString").send_keys(elem)
driver.find_element_by_name("update").click()

driver.quit()

  • 1


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных