Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Почему xpath в FireFox работает нормально, а в Python выдает ошибку ?


(Олег Стасів) #1

Проблема заключается в том, что Xpath запрос в FireFox-е работает нормально, а компилятор Python выдает ошибку (не нравится двойной underline “__”).

Ссылка на страницу сайта

Использую: FireFox v. 28 с додатками Firebug, FirePath, Python32

Так выглядит запрос в FireFox-е:

Ошибку которую я получил:

Пример кода, который не работает

import unittest
from selenium import webdriver

class TestPriceUa(unittest.TestCase):
	driver = None
		
	def setUp(self):
		self.driver = webdriver.Firefox()
		self.driver.implicitly_wait(60)
			
	def test_filter(self):
		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()
		#Verify that page include 10 elements
		self.assertEqual(len(self.driver.find_elements_by_class_name('b-offers__info')), 10)
		#Remember the first item in the list
		first = self.driver.find_element_by_xpath('.//*[@class='page__b-offers__guru'] /div[1]/@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("//a[@class='b-offers__name']")
		#for list in items:
			#print(list.text)
			
		
	#def tearDown(self):
		#self.driver.close()
		
if __name__ == "__main__" :
	unittest.main()

И все же, как мне прописать этот xpath запрос, чтобы компилятор Python не выдал синтаксической ошибки?


(Олег Стасів) #2

проблема решилась заменив кавычки ’ ’ на " "

xpath('.//*[@class='page__b-offers__guru'] /div[1]/@id')

на

xpath('.//*[@class="page__b-offers__guru"] /div[1]/@id')

(Mykhailo Poliarush) #3

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

s = "string with quote 'some string' "
print s
string with quote 'some string'
s = 'string with quote "some string"'
print s
string with quote "some string"
s = """string with quote "some string" 'some string' """
print s
string with quote "some string" 'some string'

и есть еще варианты с ескейп символами:

s = "string with quote \"some string\" 'some string' "
print s
s = 'string with quote "some string" \'some string\' '
print s

http://lessons2.ru/lesson/category/python/