Выполняйте действия TAB, пока активный элемент не станет обязательным элементом - Python - PullRequest
0 голосов
/ 01 июня 2018

Я хочу выполнить действие TAB, пока не достигну определенного веб-элемента.Пока активный элемент не является упомянутым ниже элементом, необходимо выполнить действие TAB.

>name = driver.find_element_by_name("name")
>name.send_keys("ABC")
>group = driver.find_element_by_name("group") 
>group.send_keys("DEF")

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

elem = driver.find_element_by_css_selector ('. PeriodCell input')

Пожалуйста, найдите ниже HTML-код

<div class="PeriodCell" style="left:px; width:112px;">
<div class="Effort forecasting">
<div class="entity field-value-copy-selected">
<input type="text" value="0.0" data-start="2014-09-20">
</div>
</div>
<div class="Effort unmet zero" title="">0.0
</div>
</div>

Пожалуйста, помогите.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Выполнять TAB Action до тех пор, пока вы не найдете конкретный WebElement , который не будет соответствовать рекомендациям .Согласно вашему комментарию элемент скрыт , поэтому вам нужно сначала поместить элемент в область просмотра , а затем вызвать click() / send_keys() следующим образом:

myElement = driver.find_element_by_xpath("//div[@class='PeriodCell']//input[@type='text'][@value=\"0.0\"]")
driver.execute_script("return arguments[0].scrollIntoView(true);", myElement)
# perfrom any action on the element

Однако альтернатива с использованием TAB Action выглядит следующим образом:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

global element
element = driver.find_element_by_name("name")
element.send_keys("ABC")
element = driver.find_element_by_name("group") 
element.send_keys("DEF")
while True:
    element.send_keys(Keys.TAB)
    element = driver.switch_to_active_element()
    if (element.get_attribute("type")=='text' and element.get_attribute("value")=='0.0' and element.get_attribute("data-start")=='2014-09-20'):
    print("Element found")
    break
# do anythin with the element
0 голосов
/ 01 июня 2018

Вы можете вывести элемент на видимую часть экрана, используя один из следующих методов:

  1. Используя driver.execute_script("arguments[0].scrollIntoView();", element), вы можете узнать больше о scrollIntoView() метод здесь .

  2. Использование класса Actions веб-драйвера selenium.

из selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_css_selector('.PeriodCell input')
actions = ActionChains(driver)
actions.move_to_element(element).perform()

Вы можете прочитать разницу между этими двумя методами здесь

Если вам все еще нужно использовать действие TAB для достижения элемента

from selenium.webdriver.common.keys import Keys

и с помощью .send_keys(Keys.TAB) отправить клавишу TAB на элемент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...