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

Фотография

выбор элемента из списка с помощью Selenium + Python


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

#1 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 06 июня 2016 - 15:25

Добрый день!

 

как правильно прописать в селениуме поиск и клик по элементу в списке на веб-странице. Через консоль ФФ я вижу такое:
<ul id="design-tree" class="treeview-gray treeview">

<li class="hasChildren collapsable">
<li class="hasChildren collapsable">
<div class="hitarea hasChildren-hitarea collapsable-hitarea"></div>
<span id="tree35" class="">Winding Construction</span>
<ul style="display: block;">
<li>
<a id="tree36" class="tree36" href="javascript:void(0);">Primary and Bias</a>
</li>
клик должен происходить по tree36.
 
Пишу так:
 
def test_choosing_checkbox(self):

choosing_checkbox = self.driver.find_element_by_xpath("(//*[@id='tree36']").click()
 
Пробовал и через css_selector и просто по айди без ИксПаса. Всегда одна и та же ошибка при прогоне скрипта:
 
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"(//*[@id='tree36']"}
Stacktrace:
    at FirefoxDriver.prototype.findElementInternal_ (file:///C:/Users/ichistov/AppData/Local/Temp/tmpoluibaq_/extensions/fxdriver@googlecode.com/components/driver-component.js:10770)
    at fxdriver.Timer.prototype.setTimeout/<.notify (file:///C:/Users/ichistov/AppData/Local/Temp/tmpoluibaq_/extensions/fxdriver@googlecode.com/components/driver-component.js:625)
 

 


  • 0

#2 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 06 июня 2016 - 15:31

А он visible? Может, сначала нужно кликнуть на кого-то вверху дерева, чтобы список появился?


  • 0

#3 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 06 июня 2016 - 15:48

А он visible? Может, сначала нужно кликнуть на кого-то вверху дерева, чтобы список поя

Видимый, если в браузере смотреть, то просто кликаешь и открывается новое окно. Ничего дополнительного разворачивать не нужно. Уже голова кипит, гугл не помогает. Я недавно с Питоном и Селениумом работаю, из за этого и проблема


  • 0

#4 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 06 июня 2016 - 15:50

Мне кажется, что нельзя просто написать find_element и указать путь прямо к нужному элементу. А прописать весь путь в списке, так как будто бы он был свернут по умолчанию


  • 0

#5 Vad1m198

Vad1m198

    Активный участник

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Вадим


Отправлено 06 июня 2016 - 16:06

У елемента всегда Ид="tree36"? 

Когда я вижу в @id в конце число это всегда вызывает подозрение, что оно может принимать разные значения.


  • 0

#6 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 06 июня 2016 - 16:16

У елемента всегда Ид="tree36"? 

Когда я вижу в @id в конце число это всегда вызывает подозрение, что оно может принимать разные значения.

у каждого пункта меню свой айдишник. Я не понимаю, что не так, ведь он больше нигде не используется.


  • 0

#7 Saga

Saga

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

  • Members
  • Pip
  • 37 сообщений
  • ФИО:Maryna Kolesnik
  • Город:Киев


Отправлено 06 июня 2016 - 17:08

На странице точно нет фреймов? 

Id точно не генерируется динамически?


  • 0

#8 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 07 июня 2016 - 10:48

в общем сделал так: choosing_checkbox = self.driver.find_elements_by_xpath("html/body/div/div[3]/div[1]/div/ul/li[4]/ul/li[2]/ul/li[1]/a")[0].click()
Однако кликнуть и вызвать новое диалоговое окно все равно не могу.

Все время получаю, что индекс вне диапазона


  • 0

#9 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 07 июня 2016 - 11:11

1) либо локатор неправильный
2) либо страница открыта не та в браузере
3) либо элемент находится внутри фрейма
4) либо надо добавить ожидания
 
других вариантов нет

  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#10 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 07 июня 2016 - 11:48

1. Локаторы пробовал разные, результат один.

2. Страница верная 100%

3. Узнал у прогеров, нет, фрэймы не используются

4. перед поиском нужного элемента добавил тайм.слип(30), все равно вернуло ошибку

 

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"html/body/div/div[3]/div[1]/div/ul/li[4]/ul/li[2]/ul/li[1]/a"}
Stacktrace:
    at FirefoxDriver.prototype.findElementInternal_ (file:///C:/Users/ichistov/AppData/Local/Temp/tmpuu2i_kqo/extensions/fxdriver@googlecode.com/components/driver-component.js:10770)
    at fxdriver.Timer.prototype.setTimeout/<.notify (file:///C:/Users/ichistov/AppData/Local/Temp/tmpuu2i_kqo/extensions/fxdriver@googlecode.com/components/driver-component.js:625)
 


  • 0

#11 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 07 июня 2016 - 12:45

А сам ФФ по вашему локатору этот элемент находит?


  • 0

#12 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 07 июня 2016 - 13:05

А сам ФФ по вашему локатору этот элемент находит?

Да, ФФ находит. Жесть какая то, честно, аж руки опускаются что-либо делать. И спросить некого, т.к. взяли на позицию скрипто-писателя. Знал бы, что так все туго я тяжко будет, нашел бы другую вакансию...


  • 0

#13 aid

aid

    Опытный участник

  • Members
  • PipPipPipPip
  • 448 сообщений
  • ФИО:Николай


Отправлено 07 июня 2016 - 13:10

 

А сам ФФ по вашему локатору этот элемент находит?

Да, ФФ находит. Жесть какая то, честно, аж руки опускаются что-либо делать. И спросить некого, т.к. взяли на позицию скрипто-писателя. Знал бы, что так все туго я тяжко будет, нашел бы другую вакансию...

 

 

Если не выходит каменный цветок и советы не помогают, значит, вы что-то делаете не так и не можете понять что. Скиньте весь код и если приложение в инете есть, можно было бы попробовать разобраться.


  • 0

#14 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 07 июня 2016 - 13:14

Без полного кода сложно сказать :(

 

п.с.: под ФФ находит, я подразумеваю не "выделить элемент мышкой, чтобы показали его в коде", а поиск элемента по локатору (например, через FirePath).


  • 0

#15 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 07 июня 2016 - 13:17

import Locators
import argparse
import json
import unittest
import tkinter
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import askyesno
from unittest.runner import TextTestRunner

from selenium.common.exceptions import WebDriverException
from selenium.common.exceptions import InvalidSwitchToTargetException
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import InvalidElementStateException
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import StaleElementReferenceException
from selenium.common.exceptions import UnexpectedAlertPresentException
from selenium.common.exceptions import NoAlertPresentException

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support import expected_conditions as EC
import time

from selenium.webdriver.common.by import By

from webfeatures import click
from webfeatures import design_creation
from webfeatures import login
from webfeatures import set_up
from webfeatures import field_param_setting

__author__ = 'ichistov'


class PIXlsDialogs(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""
Parse *.json configuration file and login
"""

if not hasattr(cls, "file_path"):
cls.file_path = r"D:\PIXlsDialogsConfig.json"
with open(cls.file_path) as file:
cls.json_data = json.load(file)

cls.url = cls.json_data["url"]
cls.family_pixls = cls.json_data["family"]
cls.user_login = cls.json_data["user"]["login"]
cls.user_password = cls.json_data["user"]["password"]
cls.param_change_VO = cls.json_data["param_change"]["VO"]

cls.driver = set_up()

login(driver=cls.driver, site=cls.url, user=cls.user_login, password=cls.user_password)



def test_create_pixls(self):
"""
Create pixls design and check that tabs appeared correctly
"""
design_creation(self.driver, self.family_pixls, 'pixls')

design_tabs = self.driver.find_element(By.XPATH, "//div[@id='designTabs']")
self.assertTrue(design_tabs.is_displayed(),
"Design tabs didn't appear or displayed incorrectly")

def test_input_param(self):
"""
Input value in the table row
"""

input_param = self.driver.find_element_by_id('Worksheet6')
input_param.send_keys(self.param_change_VO)


def test_choosing_checkbox(self):
"""
Open Primary and Bias window, checking installed checkbox
"""
"""
choosing_checkbox = self.driver.find_elements_by_tag_name('ul')
choosing_checkbox = self.driver.find_elements_by_tag_name('ul')
choosing_checkbox = self.driver.find_elements_by_tag_name('li')
choosing_checkbox = self.driver.find_elements_by_id('tree36')[i].click()
"""

choosing_checkbox = self.driver.find_element_by_xpath("//a[@class='tree36 hover']").click()







if __name__ == '__main__':
default_config = r"D:\PIXlsDialogsConfig.json"

parser = argparse.ArgumentParser(add_help=True,
description='Arguments for script',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

parser.add_argument('-i', '--input',
default=default_config,
type=str,
help='path to configuration json file')

args = parser.parse_args()
PIXlsDialogs.file_path = args.input

suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(PIXlsDialogs))
runner = TextTestRunner()
runner.run(suite)


  • 0

#16 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 07 июня 2016 - 13:20

Имелся ввиду код страницы :)


  • 0

#17 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 07 июня 2016 - 13:20

12943864.png


  • 0

#18 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 07 июня 2016 - 13:21

choosing_checkbox self.driver.find_element_by_xpath("//a[@class='tree36 hover']").click()

 

Обычно это слово добавляется в элемент при наведении мышки. Скриптом вы мышку не наводите, вот элемент и не находится.

 

п.с.: картинка не отображается у вас :(


  • 0

#19 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 07 июня 2016 - 13:26

Я почему то файл не могу прикрепить с тектом кода


  • 0

#20 Darksol89

Darksol89

    Активный участник

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Иван
  • Город:Санкт-Петербург


Отправлено 07 июня 2016 - 13:26

choosing_checkbox self.driver.find_element_by_xpath("//a[@class='tree36 hover']").click()

 

Обычно это слово добавляется в элемент при наведении мышки. Скриптом вы мышку не наводите, вот элемент и не находится.

 

п.с.: картинка не отображается у вас :(

ну я пробовал и без Ховера.


  • 0


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

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