执行TAB操作,直到active元素是必需元素 - Python

时间:2018-06-01 06:32:51

标签: python selenium selenium-webdriver

我想执行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输入')

请在下面找到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 :(得分:0)

您可以使用以下方法之一将元素带到屏幕的可见部分。

  1. 使用driver.execute_script("arguments[0].scrollIntoView();", element) 您可以详细了解scrollIntoView()方法here

  2. 使用selenium webdriver的Actions类。

  3. 来自selenium.webdriver.common.action_chains的

    导入ActionChains

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

    您可以阅读这两种方法之间的区别here

    如果您仍需要使用TAB操作来访问元素

    from selenium.webdriver.common.keys import Keys
    

    并使用.send_keys(Keys.TAB)将TAB键发送到元素

答案 1 :(得分:0)

执行TAB Action直到找到特定的 WebElement 不符合最佳做法。根据您的评论,该元素已隐藏,因此您需要先将该元素置于Viewport内,然后按以下方式调用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