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

Фотография

Найти элемент после его добавления

webdriver python selenium

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 12

#1 andreykou

andreykou

    Новый участник

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 29 августа 2016 - 05:25

Привет всем,

 

У меня такая ситуация. 

Я добавляю на свою страницу к примеру, новость.

После добавления новости, новость появляется на сайте.

Как я могу убедится что новость была добавлена?

У меня нет информации элемента, а именно class name или id name.

 

Спасибо всем за ответы!


  • 0

#2 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 29 августа 2016 - 07:06

По заголовку новости? Добавляй туда дату и время, а потом проверяй, что она есть в заголовке. Или удаляй новость с каким то определенным заголовком из БД/ через интерфейс админки перед началом теста или в конце , потом добавляй с таким же и проверяй , что появилось
  • 0

#3 andreykou

andreykou

    Новый участник

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 29 августа 2016 - 07:42

По заголовку новости? Добавляй туда дату и время, а потом проверяй, что она есть в заголовке. Или удаляй новость с каким то определенным заголовком из БД/ через интерфейс админки перед началом теста или в конце , потом добавляй с таким же и проверяй , что появилось

Я добавляю заголовок в новость (текст заголовка находится в файле):

 

browser.xpath("//input[@class='bs3-form-control']").click()
fl = open("/home/andrey/PycharmProjects/test/vspgroup.local/forTest/news/forHeader.txt").read().decode('utf8')
browser.find_element_by_xpath("//input[@class='bs3-form-control']").send_keys(fl)

 

потом сохраняю и ищу по заголовку:

 

try:
browser.find_element_by_link_text(fl)
pass
except Exception as d:
print ("Problem with news", format(d))

 

проблема что пишет ошибку:

 

UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff'


  • 0

#4 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 29 августа 2016 - 08:29

ну это опять что то с кодировкой у тебя . попробуй через u"строка"


  • 0

#5 andreykou

andreykou

    Новый участник

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 29 августа 2016 - 08:33

ну это опять что то с кодировкой у тебя . попробуй через u"строка"

 

Вопрос если find_element_by_link_text ищет только линки или текст тоже.....


  • 0

#6 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 29 августа 2016 - 08:41

он ищет текст в которой есть есть тег <a>, то есть гиперссылку.

Ты можешь искать этот элемент через xpath

"//div(text()=" + fl + ")"

ну или через .format() подставлять переменную


  • 1

#7 andreykou

andreykou

    Новый участник

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 29 августа 2016 - 10:16

он ищет текст в которой есть есть тег <a>, то есть гиперссылку.

Ты можешь искать этот элемент через xpath

"//div(text()=" + fl + ")"

ну или через .format() подставлять переменную

 

Спасибо получилось написал  чуть чуть по другому, но думаю идея таже:

 

try:
browser.find_element_by_xpath("//*[text()='%s']" % fl)
except Exception as d:
print ("Problem with news", d.message)


  • 0

#8 andreykou

andreykou

    Новый участник

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 29 августа 2016 - 11:36

он ищет текст в которой есть есть тег <a>, то есть гиперссылку.

Ты можешь искать этот элемент через xpath

"//div(text()=" + fl + ")"

ну или через .format() подставлять переменную

 

Вопрос....

А если после того как я нашёл элемент я хочу в той же строке сделать click(), это должно выглядеть примерно так?

 

browser.find_element_by_xpath("//*[text()='%s']/i[@class='fa fa-1-5x']" %fl).click()

 

но в этом случаи он ругается.....

поможет ли в этой ситуации switch_to?


  • 0

#9 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 29 августа 2016 - 12:08

какую ошибку отдает в консоль ?

сделай через format или через + и все будет работать.


  • 0

#10 andreykou

andreykou

    Новый участник

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 29 августа 2016 - 12:25

какую ошибку отдает в консоль ?

сделай через format или через + и все будет работать.

 

С этим я разобрался, но после добавления новости появляется строка, где я могу нажать на кнопку и отредактировать новость.

Но я хочу отредактировать ту новость, которую я добавил.

Так я в начале ищу эту новость и так же я ищу кнопку по class и делаю click()

Но это действие выкидывает ошибку:

 

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"//*[text()='Test Text test test test']/i[@class='fa fa-1-5x']"}
Stacktrace:
    at FirefoxDriver.prototype.findElementInternal_ (file:///tmp/tmpzpiVtp/extensions/fxdriver@googlecode.com/components/driver-component.js:10770)
    at FirefoxDriver.prototype.findElement (file:///tmp/tmpzpiVtp/extensions/fxdriver@googlecode.com/components/driver-component.js:10779)
    at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpzpiVtp/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
    at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmpzpiVtp/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
    at DelayedCommand.prototype.execute/< (file:///tmp/tmpzpiVtp/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)
 
 
Я как бы хочу найти элемент внутри элемента, как бы вот так может------> browser.find_element_by_xpath("//*[text()='%s']" % fl ).find_element_by_xpath("//i[@class='fa fa-1-5x']").click()
Но опять же токая запись делает мне ошибку.

  • 0

#11 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 29 августа 2016 - 13:12

нужно смотреть HTML


  • 0

#12 andreykou

andreykou

    Новый участник

  • Members
  • Pip
  • 39 сообщений
  • ФИО:Андрей Куриленко

Отправлено 01 сентября 2016 - 06:13

Получилось если кому надо:

 

browser.xpath("//*[text()='%s']/parent::tr/td/span/i[@class='fa fa-1-5x']" % fl).click()


  • 0

#13 the0

the0

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Сергей


Отправлено 05 сентября 2016 - 17:38

Если вам без разницы, какое будет имя у новости, вам просто нужно проверить функционал, то:
 

news = "Тестовая новость" + strftime("%H:%M:%S", gmtime())
wd.find_element_by_id("News_announsment")).send_keys(news)
wd.find_element_by_xpath("//input[@value='Submit']")).click()
assert news in wd.find_element_by_xpath("element").text

Теперь каждый запуск будет новое имя для новости, и каждый прогон именно оно будет искомым при проверке публикации.

  • 0

Основательный подход




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

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

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