Wpis z mikrobloga

Mam pytanie. Korzystam z Selenium Webdriver oraz pythona (Pycharm) do testowania aplikacji webowej. Wyglada tak, że mam po lewej stronie generowane menu, podzielone na trzy sekcje. Chciałbym sprawdzić ile jest tam pozycji łącznie w pierwszej sekcji. Napisałem kod:

http://pastebin.com/ucbisATa

Dostaję wynik:

1

1

2

2

3

Trójka jest jedna, czyli jak program sprawdza czy wyświetlona jest nieistniejąca pozycja zamiast przejść do except to zwyczajnie stoi. Podobnie dzieje się jak:

driver.findelementbyxpath('//li['+str(a+1)+']/a/span').isdisplayed()

zamienię na:


driver.findelementbyxpath('//li['+str(a+1)+']/a/span')

czy

driver.findelementbyxpath('//li['+str(a+1)+']/a/span').click()

czy

test = driver.findelementbyxpath('//li['+str(a+1)+']/a/span')

Sama składnia szukająca pozycji w menu jest ok, bo jak zrobię:

for a in range(100):

print ( driver.find
elementbyxpath('//li['+str(a+1)+']/a/span'))

to wyświetlają mi się nazwy kolejnych pozycji w menu. Oczywiście analogicznie jak wcześniej - gdy program powinien podać nazwę pozycji, która nie istnieje, zatrzymuje się zamiast rzucić błędem.

(oczywiście print(a) oraz print("Except") są tylko na potrzeby sprawdzenia gdzie program utyka. Och skasowanie niczego nie zmienia.)

Jakiś pomysł co z tym dalej zrobić? Jakiś inny sposób poza try/except?

#python #selenium #testowanieoprogramowania
  • 6
@venomik: Wrzuć kod w jakieś normalne miejsce, bo nic tu nie widac. WebDriver będzie stał, bo będzie czekał na pojawienie się elementu. Może lepiej zamiast szukać elementu, lepiej poszukać elementów, a póxniej na znalezionych elementach robić isdisplayed()?
@venomik: teraz korzystasz z findelementbyxpath, a jest jeszcze findelementsbyxpath, tylko oczywiście xpath musisz zmodyfikować tak, żeby łapał wszystkie leementy, które chcesz.

Edit: i jak wrzucasz kod, to wrzucaj ten z programu, a nie skopiowany z wykopu ;)
@venomik: Ewentualnie możesz jeszcze zmneijszyć czas cozekiwania WebDrivera na element

fp = webdriver.FirefoxProfile()

driver = webdriver.Firefox(firefoxprofile=fp)

driver.implicitly
wait(3)

Ale to będzie zły pomysł i znacznie gorszy niż to co napisałem ;)