Как я могу перейти от одной стороны ползунка к другой? - PullRequest
0 голосов
/ 22 июня 2019

Я занимаюсь веб-обработкой https://www.rogers.com/web/totes/wireless/build-plan. Когда вы нажмете на телефон и перейдете на страницу, содержащую различные варианты планов, вы можете переместить ползунок, чтобы выбрать наиболее подходящий для вас. Теперь я хочу очистить данные после каждого перемещения ползунка каждый раз. Однако, когда я использую Selenium, полоса не начинается с левой стороны, и она произвольно перемещается между точками на ползунке. Для некоторых телефонов мой код приводит к ошибке после прохождения первой точки на слайдере. И в других случаях определенные точки на ползунке пропускаются все вместе или щелкаются дважды.

Я пробовал разные CSS. Селекторы, но некоторые ограничивают длину бара, пропускают все различные типы планов. Я попытался напечатать информацию о webElement, чтобы узнать, выбирает ли он что-то дважды, но каждый раз кажется, что она отличается. Поэтому он не проходит через слайдер последовательно или в соответствии с тем, что я хочу

#collects all different points in slider
    planSlider = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.desSliderWrapper div')))
    print(len(planSlider))

    #runs through slider points
    for plan in planSlider:
        time.sleep(2)

        print(plan)

        plan.click()

Я хотел бы иметь возможность перебирать точки от левой стороны ползунка до правой стороны по порядку, независимо от того, имеет ли он 3 точки или 5 и т. Д.

1 Ответ

1 голос
/ 22 июня 2019

Вот логика выбора плана и получения подробностей.

plans = driver.find_elements_by_css_selector("div.card-slider li")
for planNum in range(1,len(plans)+1):
    print("------------------------------------------------------------------")
    plan = driver.find_element_by_css_selector("div.card-slider li:nth-of-type("+str(planNum) + ")")
    plan.click()
    print(plan.text)
    print(driver.find_element_by_xpath("//div[strong['plans from:']]").text)

Вот вывод:

enter image description here

Отредактировано:

Вот скрипт, который выберет план.

# get the plan selection span
planSelector = driver.find_element_by_xpath("//span[@class='ui-slider-handle ui-state-default ui-corner-all']")

# set the mouse position based on the number of plans
numberOfPlans = len(driver.find_elements_by_xpath("(//div[starts-with(@class,'sectionTable tabCount-')])[1]//div[starts-with(@class,'sectionCol')]"))

for selectPlan in range(1,5): #<== just looping to make sure it's working for all the plans (remove this and uncomment "selectPlan" variable in the below line)

    # specify the plan that you want to select
    # selectPlan = 4 #<======== change this number based on your interested plan number
    percentage = round((100/(numberOfPlans-1))*(selectPlan-1),4)
    print(percentage)
    #select plan
    # driver.execute_script("arguments[0].dispatchEvent(new MouseEvent('mousedown', {'bubbles': true,'cancelable': true}))",planSelector)
    driver.execute_script("arguments[0].setAttribute('style','left: " + str(percentage) + "%;')",planSelector)
    time.sleep(1)
    # now trigger the mouse move event which will tiger the change in the price
    # this will make sure js attached to the element in DOM will trigger
    driver.execute_script("arguments[0].dispatchEvent(new MouseEvent('mousedown', {'bubbles': true,'cancelable': true}))",planSelector)
    # time.sleep(1)
    driver.execute_script("arguments[0].dispatchEvent(new MouseEvent('mousemove', {'bubbles': true,'cancelable': true}))",planSelector)
    driver.execute_script("arguments[0].dispatchEvent(new MouseEvent('mouseup', {'bubbles': true,'cancelable': true}))",planSelector)
    time.sleep(1)
    selectedPlan = driver.find_element_by_class_name("selectedPlanRed").text
    print ("Selected Plan:-" + selectedPlan)
    time.sleep(3)

Плохой скриншот, чтобы приспособиться к размерупредел:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...