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

Фотография

Поиск элемента на странице

поиск selenium python

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

#1 diga

diga

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

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Габбасов Динар Агдамович

Отправлено 16 сентября 2015 - 17:01

Доброго времени суток! имеется проблемка, после того как я нашел нужный мне элемент на веб странице и изменил сортировку мне его необходимо найти, для этого я попытался реализовать цикл, но когда запускает все виснет, помогите пожалуйста исправить

 search_result = None
        
        while True:
            search_result = self.driver.find_element_by_link_text(first_result)
            if search_result == None:
                self.driver.find_element_by_xpath("//div[@class='layout__col layout__col_search-results_normal i-bem']/div[4]/div[2]/a[7]").click()
            else:
                search_result.click()
                break

first_result это переменная где задан название моего элемента 

 

так же мне интересует, функция driver.find_element_by_link_text() если ничего не находит то какое значение он возвращает? мне показалось надо объявить переменную  search_result = None чтоб потом проверять (ну по условию видно) По идеи должно быть так, если он не находит нужный элемент он переходит на новую страницу, если находит происходит клик и цикл закрывается. но у меня виснет и не работает. в чем может быть ошибка? спасибо большое за ранее! 


  • 0

#2 diga

diga

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

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Габбасов Динар Агдамович

Отправлено 17 сентября 2015 - 05:43

Полный скрипт выглядит следующим образом: 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from qwerty import setup_console
setup_console('utf-8', False)
#...
    
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys




class TestSeleniumForPython(unittest.TestCase):
    driver = None
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.maximize_window()


    def test_search_in_yandex(self):
        self.driver.get("http://www.yandex.ru")
        self.driver.find_element_by_id("tab-market").click()
        self.driver.implicitly_wait(120)
        self.driver.find_element_by_link_text("Электроника").click()
        self.driver.implicitly_wait(120)
        self.driver.find_element_by_link_text("Мобильные телефоны").click()
        self.driver.find_element_by_css_selector(r'.black').click()
        self.driver.find_element_by_id("gf-pricefrom-var").send_keys('35000')
        self.driver.find_element_by_xpath(".//*[text()='Диагональ экрана']/..").click()
        self.driver.find_element_by_id("gf-2142557926-from").send_keys('3')
        self.driver.find_element_by_xpath(".//*[text()='Применить']/..").click()
        
        my_element = self.driver.find_elements_by_class_name("snippet-card")
        print ('The number of elements', len(my_element))
        self.driver.implicitly_wait(180)
        my_apple = self.driver.find_elements_by_partial_link_text('Apple')
        print ('The number of Apple', len(my_apple))
        
        first_result = self.driver.find_element_by_xpath("//div[@class='layout layout_type_search i-bem layout_js_inited']/div[1]/div[1]/div[1]/div[1]/div[3]/div[1]/div[1]/div[1]/h3/a/span").get_attribute("title")
        self.driver.implicitly_wait(180)
        self.driver.find_element_by_link_text("по новизне").click()
        self.driver.implicitly_wait(360)
        
        search_result = None
        
        while True:
            search_result = self.driver.find_element_by_link_text(first_result)
            if search_result == None:
                self.driver.find_element_by_xpath("//div[@class='layout__col layout__col_search-results_normal i-bem']/div[4]/div[2]/a[7]").click()
            else:
                search_result.click()
                break
            
        rat = self.driver.find_element_by_xpath("//div[@class='headline__header']/div/meta[1]").get_attribute("content")
        print ("rating of phone", rat)


    def tearDown(self):
        self.driver.close()        


if __name__ == "__main__":
    unittest.main()

помогите пожалуйста решить вопрос с циклом


  • 0

#3 vkazar

vkazar

    Активный участник

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 17 сентября 2015 - 07:09

//div[@class='layout layout_type_search i-bem layout_js_inited']/div[1]/div[1]/div[1]/div[1]/div[3]/div[1]/div[1]/div[1]/h3/a/span

От такого избавляйтесь, ни к чему хорошему такие xPath не приведут :)
По сабжу.
Подозреваю, дело в том, что у Вас find_element_by_link_text(first_result) принимает WebElement. Не знаю, как в питоне, а в C#, например, FindElementByLinkText(string linkText) принимает string (как видно из объявления метода :wink:  )


  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#4 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 17 сентября 2015 - 10:15

У тебя вообще, не понятный код

Ты пишешь:

search_result = None

None - это вообще константа с типом NoneType. Т.е. это не пусто и не ноль.

 

Далее

while True:
            search_result = self.driver.find_element_by_link_text(first_result)

Очень-очень плохо помню пайтон, но здесь search_result не может быть None и у тебя выполняется else.

 

first_result ты получаешь как get_attribute("title"), если title нет, то ты получишь None

Что будет, в таком случае:

search_result = self.driver.find_element_by_link_text(None) - я не представляю вообще

 

 

 

Что надо делать:

1. Поставь побольше print

2. Пройтись дебагом - pdb или как-то так называется

 

 

Тут какая-то банальная ошибка


  • 0

#5 diga

diga

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

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Габбасов Динар Агдамович

Отправлено 17 сентября 2015 - 13:48

сделал, таким образом: 

 

        while True:
            try:
                search_result = self.driver.find_element_by_link_text(first_result)
            except NoSuchElementException:
                self.driver.find_element_by_xpath("//div[@class='layout__col layout__col_search-results_normal i-bem']/div[4]/div[2]/a[7]").click()
            else:
                search_result.click()
                break

при запуске как скрипт он начинает виснуть 

а если те же команды использовать через консоль работает все отлично. 

 

не могу понять почему так 


  • 0

#6 andrea

andrea

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

  • Members
  • Pip
  • 28 сообщений
  • ФИО:Лучковский Андрей Юрьевич
  • Город:Киев

Отправлено 30 сентября 2015 - 13:51

Добрый день. Кто подскажет как написать xpath для списка єлементов и из него убрать последний?


  • 0

#7 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 30 сентября 2015 - 14:02

Добрый день. Кто подскажет как написать xpath для списка єлементов и из него убрать последний?

//tr[position()<last()]

  • 0

#8 andrea

andrea

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

  • Members
  • Pip
  • 28 сообщений
  • ФИО:Лучковский Андрей Юрьевич
  • Город:Киев

Отправлено 30 сентября 2015 - 14:10

 

Добрый день. Кто подскажет как написать xpath для списка єлементов и из него убрать последний?

//tr[position()<last()]

большое спс) сработало)


  • 0



Темы с аналогичным тегами поиск, selenium, python

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

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