Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Как правильно скопировать динамический id selenium python

selenium
python
webdriver
Теги: #<Tag:0x00007fedbb6b2bb8> #<Tag:0x00007fedbb6b2a28> #<Tag:0x00007fedbb6b27a8>

(Andrey Kuzmin) #1

Коллеги, доброго дня. Есть скрипт для генерации временной лицензии для 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 - как правильно вставить эти данные и новое место.
Всю голову сломал.


(Maxim Zaitsev) #2

Если id динамический, то необходимо использовать другие стратегии поиска (по классу, по тегу, по тексту и т.п.).
Какой html-код рядом с полем со значением лицензии ?


(Andrey Kuzmin) #3

Максим, вот кусок html кода с блоком:

    <tr id="license_11434134" class="headingRow  evaluation" data-details-href="#containerrow_11434134">
        <td>
            <span id="plus_11434134" class="action aui-icon aui-icon-small aui-iconfont-collapsed"></span>
            
                <span id="plus_11434134" class="action aui-icon aui-icon-small aui-iconfont-time" title="Evaluation License"></span>
            
            <span>SEN-L11434134</span>
        </td>
        <td>
            <span class="desc"><strong>Confluence (Server): Evaluation</strong></span>
        </td>

        <td class="truncate-ellipsis">
            <span class="name_11434134 account-name">confluence</span>
        </td>


        <td class=" support-expiry-date">
            25 Apr 2018
        </td>

        <td>
            
                <a href="/products/requestsupport/11434134" data-analytics="request-support-link">
                    Request Support
                </a>
            
        </td>
    </tr>

    <tr class="evaluation">
        <td id="containerrow_11434134" style="display:none" class="containerRow" colspan="5">
            <div id="plusrow_11434134" style="display:none" class="plusRow license"></div>
        </td>
    </tr>

(Andrey Kuzmin) #4

Всем спасибо! Разобрался сам.
Вот готовый скрипт:
Всем спасибо разобрался сам!
Вот готовый скрипт:

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

Готов выслушать замечания


(Yaroslav Pernerovskyy) #5

От жеж…не делайте так!
Лучше разберитесь с ожиданиями в вебдрайвере:


(Andrey Kuzmin) #6

спасибо за замечание)
обязательно разберусь)