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

Тестирование безопасности
онлайн, начало 10 июля
Тестирование мобильных приложений
онлайн, начало 10 июня
Программирование на Java для тестировщиков
онлайн, начало 12 июня
Школа для начинающих тестировщиков
онлайн, начало 11 июня
Фотография

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

поиск 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
  • 819 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 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 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн




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

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

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

Яндекс.Метрика
Реклама на портале