t.me/atinfo_chat Telegram группа по автоматизации тестирования

работа webdriver и java скрипт, имитация нажатия клавиш


(JustBush) #1

всем доброго времени суток... столкнулся с такой задачей - мне нужно протестировать выпадающие подсказки по аналогии с onliner.by(буду на него ссылаться).. задача такая - 

1) зайти на onliner.by

2) в строку поиска вести 'nokia'

3) выбрать 3-й по счету элемент в выпадающем меню(посредством нажатия DOWN 3 раза)

4) нажать ентер и пожалуй дальше я сам справлюсь

помогите реализовать пункт3 на python+wevdriver... буду весьма благодарен


(zc84) #2

посмотрите в сторону org.openqa.selenium.Keys


(JustBush) #3

на сколько я знаю, Keys удобно использовать при иммитации клавиатуры относительно полей ввода, передавая код клавиши как аргумент метода send_keys(Keys.ENTER) напрмер... в моем же случае, если я правильно понимаю, необходимо сфокусироваться на классе всплывающей подсказки, а данный метод не приемлем для данного класса


(Mykhailo Poliarush) #4
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
d = webdriver.Firefox()
d.get("http://onliner.by")
e = d.find_element_by_id("g-search-input")
e.send_keys("nokia")
time.sleep(2)
e.send_keys(Keys.DOWN+Keys.DOWN+Keys.DOWN+Keys.ENTER)
time.sleep(2)
d.close()

(JustBush) #5

 

from selenium import webdriver
import unittest, time, re
import string
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
 
 
 
 
 
class Test1(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Remote("http://192.168.121.109:4444/wd/hub", webdriver.DesiredCapabilities.FIREFOX)
 
        self.base_url = "http://onliner.by"
        self.driver.implicitly_wait(30)
 
    def test_1(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        e = driver.find_element_by_id("g-search-input")
        e.send_keys("nokia")
        time.sleep(2)
        e.send_keys(Keys.DOWN+Keys.DOWN+Keys.DOWN+Keys.ENTER)
        time.sleep(2)
 
 
 
unittest.main()
 

(JustBush) #6

пробовал запускать на виртуалке:

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
 
PROXY_HOST = "proxy.open.by"
PROXY_PORT = 8080
fp = webdriver.FirefoxProfile()
# Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5
fp.set_preference("network.proxy.type", 1)
fp.set_preference("network.proxy.http", PROXY_HOST)
fp.set_preference("network.proxy.http_port", PROXY_PORT)
fp.set_preference("network.proxy.ftp", PROXY_HOST)
fp.set_preference("network.proxy.ftp_port", PROXY_PORT)
fp.set_preference("network.proxy.ssl", PROXY_HOST)
fp.set_preference("network.proxy.ssl_port", PROXY_PORT)
fp.set_preference("network.proxy.no_proxies_on", "") # set this value as desired
 
d = webdriver.Firefox(firefox_profile=fp)
 
#d = webdriver.Chrome()
d.get("http://onliner.by")
e = d.find_element_by_id("g-search-input")
e.send_keys("nokia")
time.sleep(2)
e.send_keys(K
eys.DOWN+Keys.DOWN+Keys.DOWN+Keys.ENTER)
time.sleep(10)
d.close()
 
все заработало - в чем проблема? наблюдаю за происходящим в первом случае - вводится слово "nokia", потом проходит 2 сек, стирается и заново вводится слово "nokia", нажимается ентер, без кнопки DOWN... скажите, если ли разница между первым и вторым кодом, касательно взаимодействия с браузером? т.е. если я использую RC, то я не работаю через нативный интерфейс?

(Mykhailo Poliarush) #7

ну тут нужен дебаг, без него не обойтись + надо не исключать, что может быть баг в самом вебдрайвере или зависимость от окружения

надо открывать интерпретатор и шаг за шагом выполнять и смотреть, состоятие объектов и их значения

если есть PyDev, то можно через него продебажить


(Vladimir Zuy) #8

Хотел задать вопрос о том как сделать имитацию клавиш сразу cntrl +F5 или cntrl + R
Суть проблемы в том, что переходит на другую страницу и не подгружает стили -после нажатия cntrl +F5 стили подгружаются и всё нормально работает

    driver.findElement(By.id("password")).sendKeys(Keys.ENTER);
driver.findElement(null).sendKeys(Keys.CONTROL + Keys.F5); // тут я не знаю как правильно

(cactus) #9

Обновление страницы посредством драйвера - driver.navigate().refresh();