Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 16, 2014 16:33:18

scamp68
Зарегистрирован: 2014-03-21
Сообщения: 8
Репутация: +  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()

Помогите мне написать этот цикл

Офлайн

#2 Апрель 16, 2014 18:21:13

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Помогите разобраться с циклом чтобы написать веб-драйвер тест

Пробуйте

		#Изменяю сортировку на другую(популярность или новизна)
    	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")
PS. Ужасное задание… или у меня комп тормозной)

Отредактировано noob_saibot (Апрель 16, 2014 18:41:51)

Офлайн

#3 Апрель 17, 2014 10:12:48

scamp68
Зарегистрирован: 2014-03-21
Сообщения: 8
Репутация: +  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")

Офлайн

#4 Апрель 17, 2014 15:32:02

scamp68
Зарегистрирован: 2014-03-21
Сообщения: 8
Репутация: +  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')

Помогите пожалуйста завершить этот цикл, не выводится ‘Hello’

Отредактировано scamp68 (Апрель 17, 2014 15:32:46)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version