Форум сайта python.su
0
Задача состоит в том, что мне нужно найти и нажать по имени запомненного обьекта.
Мне нужно прогнать мою переменную по каждому элементу списка, если совпадений нет, тогда перейти на следующую страницу, и так далее, пока переменная не будет равна с элементом из списка. Если ровная, тогда кликнуть по ней.
Пример страницы:
Проблема заключается в том, что цикл проходит только один раз: прогоняет каждый элемент из списка, если этого элемента нет, переключается на вторую страницу и на этом все.Мне нужно, чтобы это повторялось до тех пор, пока элемент не будет найден.
Пример кода:
import unittest from selenium import webdriver from selenium.webdriver.common.keys import Keys import time class TestPriceUa(unittest.TestCase): driver = None def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(60) def test_filter(self): #Зайти на yandex.ru self.driver.get("http://yandex.ru") #В разделе Маркет выбираю Сотовые телефоны self.driver.find_element_by_id("tab-market").click() self.driver.find_element_by_css_selector(r'.l-categories a[href="/catalog.xml?hid=91491"]').click() #Захожу в росширенный поиск self.driver.find_element_by_css_selector(r'.black').click() #Задаю параметры поиска self.driver.find_element_by_id("f2142558003-1").send_keys('20000') self.driver.find_element_by_css_selector('#f2142557926 span').click() self.driver.find_element_by_id("f2142557926-1").send_keys('3') self.driver.find_element_by_css_selector('#f1801946-1871375').click() self.driver.find_element_by_css_selector('#f1801946-1871447').click() self.driver.find_element_by_css_selector('#f1801946-1871499').click() self.driver.find_element_by_css_selector('#f1801946-1871151').click() self.driver.find_element_by_css_selector('#f1801946-11756910').click() self.driver.find_element_by_css_selector(r'.b-gurufilters_submit-button').click() #Проверка, что на странице 10 элементов self.assertEqual(len(self.driver.find_elements_by_class_name('b-offers__info')), 10) #Запоминаю первый телефон в списке first = self.driver.find_element_by_css_selector('.results>tbody>tr>td>form>div>:first-child>div.b-offers__desc>h3>a').get_attribute('id') print(first) #Изменяю сортировку на другую(популярность или новизна) self.driver.find_element_by_xpath("html/body/div[3]/table/tbody/tr[2]/td[2]/div/ul[2]/li[4]/a").click() #Список телефонов уже с новой сортировкой items = self.driver.find_elements_by_xpath("//div[@class='b-offers b-offers_type_guru'] /div[@class='b-offers__desc'] /h3 /a") #Поиск ранее запомненного телефона for list in items: if list.get_attribute('id')!=first: continue list.click() break else: self.driver.find_element_by_css_selector('.b-pager__next').click() #def tearDown(self): #self.driver.close() if __name__ == "__main__" : unittest.main()
Офлайн
20
Пробуйте
#Изменяю сортировку на другую(популярность или новизна) self.driver.find_element_by_xpath("//body/div[3]/table/tbody/tr[2]/td[2]/div/ul/li[4]/a").click() #Список телефонов уже с новой сортировкой items = self.driver.find_elements_by_xpath("//div[@class='b-offers__desc']/h3/a") #Поиск ранее запомненного телефона while 1: for mel in items: if mel.get_attribute('id')==first: mel.click() break else: self.driver.find_element_by_css_selector('.b-pager__next').click() items = self.driver.find_elements_by_xpath("//div[@class='b-offers__desc']/h3/a")
Отредактировано noob_saibot (Апрель 16, 2014 18:41:51)
Офлайн
0
noob_saibot, спасибо Вам за помощь, решение задачи помогло, но с небольшими изменениями:
#Список телефонов уже с новой сортировкой items = self.driver.find_elements_by_xpath("//div[@class='b-offers b-offers_type_guru'] /div[@class='b-offers__desc'] /h3 /a") #Поиск ранее запомненного телефона и клик по нему while 1: for mel in items: if mel.get_attribute('id')!=first: continue mel.click() return else: self.driver.find_element_by_css_selector('.b-pager__next').click() items = self.driver.find_elements_by_xpath("//div[@class='b-offers__desc']/h3/a")
Офлайн
0
items = self.driver.find_elements_by_xpath("//div[@class='b-offers b-offers_type_guru'] /div[@class='b-offers__desc'] /h3 /a") #Цикл для поиска ранее запомненного телефона и клик по нему while 1: for mel in items: if mel.get_attribute('id')!=first: continue mel.click() rating = self.driver.find_element_by_css_selector('div[itemprop="aggregateRating"] meta[itemprop="ratingValue"]').get_attribute('content') print('rating is:',rating) break else: self.driver.find_element_by_css_selector('.b-pager__next').click() items = self.driver.find_elements_by_xpath("//div[@class='b-offers__desc']/h3/a") print('Hello')
Отредактировано scamp68 (Апрель 17, 2014 15:32:46)
Офлайн