我想执行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>
请帮忙。在此先感谢。
答案 0 :(得分:0)
您可以使用以下方法之一将元素带到屏幕的可见部分。
使用driver.execute_script("arguments[0].scrollIntoView();", element)
您可以详细了解scrollIntoView()
方法here。
使用selenium webdriver的Actions类。
导入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