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

Ожидание загрузки элемента из выпадающего списка

webdriver
selenium
python
Теги: #<Tag:0x00007fedbf3db6c0> #<Tag:0x00007fedbf3db558> #<Tag:0x00007fedbf3db418>

(Максим Рублёв) #1
import unittest
import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver import ActionChains
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 TimeoutException

def wait_xpath(driver, xpath):
    try:
        wait = WebDriverWait(driver, 30).until(
            EC.element_to_be_clickable((By.XPATH, xpath)))
        return wait
    except TimeoutException:
        print("Не дождались появления панели на форме " + xpath)


def wait_file_xpath(driver, xpath):
    try:
        wait = WebDriverWait(driver, 30).until(
            EC.presence_of_element_located((By.XPATH, xpath)))
        return wait
    except TimeoutException:
        print("Не дождались появления панели на форме " + xpath)



def click_xpath(driver, xpath):
    driver.find_element_by_xpath(xpath).click()
    
def wait_and_click_xpath(driver, xpath):
    tmp = wait_xpath(driver, xpath)
    tmp.click()

def send_keys_xpath(driver, xpath, keys):
    tmp = wait_xpath(driver, xpath)
    #tmp.clear()
    tmp.send_keys(keys)

class ServiceTests(unittest.TestCase):
    def setUp(self):

Доходим до выбора адреса и спотыкаюсь на этом,хочу реализовать без time.sleep()

#Изменить адрес регистрации
        wait_and_click_xpath(self.driver,
            "//*[@id='form494201420.FormStep7.Panel71.Panel710.residenceaddress']/div[1]/div/div/a[1]/span[1]")

        #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        #Выбор региона
        wait_and_click_xpath(self.driver,
            "//div[2]/div/form/span/input")

        #Приморский край выбор
        wait_and_click_xpath(self.driver,
            "//a[55]/span[2]")

        #time.sleep(2)
        #Город
        wait_and_click_xpath(self.driver,
            "//div[3]/div/div[2]/div[2]/div/form/span/input")
                
        #Выбор города
        try:
            wait_and_click_xpath(self.driver,
                "//div[3]/div/div[2]/div[2]/div[3]/div[2]/div[2]/div/a[5]/span[2]")
        except:
            wait_and_click_xpath(self.driver,
                "//div[3]/div/div[2]/div[2]/div/form/span/input")

        wait_and_click_xpath(self.driver,
                "//div[3]/div/div[2]/div[2]/div[3]/div[2]/div[2]/div/a[5]/span[2]")

        #Улица
        wait_and_click_xpath(self.driver,
            "//div[5]/div/div[2]/div[2]/div/form/span/input")

        #Выбор улицы
        #wait_and_click_xpath(self.driver,
        #   "//a[858]")
        try:
            wait_and_click_xpath(self.driver,
                "//a[858]")
        except:
            wait_and_click_xpath(self.driver,
                "///div[5]/div/div[2]/div[2]/div/form/span/input")
            
        wait_and_click_xpath(self.driver,
                "//a[858]")

Проблема с выбором города и улицы так работает,но очень криво и ожидание очень большое,хотелось бы избавиться от слипов.Выбираем регион он сразу выдаёт весь список регионов при нажатии,проблема в дальнейшем с выбором города,в том,что 1-2 секунды подгружается список город в этом регионе. Может кто подскажет как реализовать ожидание более цивилизованно?


(Yaroslav Pernerovskyy) #2

Выпадающий список у вас как реализован? Как элемент <select /> или по другому?