2016-07-30 96 views
1

在所述目标网页,有一个angularjs输入元件设置angularjs输入值:如何使用硒(蟒)

<input type="text" class="form-control ng-pristine ng-valid ng-valid-maxlength ng-touched" placeholder="Role name" ng-model="selectedRole.roleName" maxlength="50"> 

enter image description here ,我可以通过使用(By.CSS_SELECTOR,'input[ng-model="selectedRole.roleName"]')定位使用硒(蟒)的元件,但不能确定它的价值,有没有人可以帮助,预先感谢!

+0

你如何设定它的价值?向我们展示您的代码 –

+0

我试过的方法:role_name = driver.find_element_by_css_selector('input [ng-model =“selectedRole.roleName”]')1. role_name.send_keys(“alvin”)2. self.driver.execute_script('参数[0] .setAttribute(“value”,“alvin”);',role_name),都不起作用。顺便说一句,我可以通过使用role_name.get_attribute(“值”) – Alvin

+0

@Alvin获取元素值您是否在尝试设置值之前等待,直到使用WebDriverWait'可见元素..? –

回答

0

一旦你所在的input元素,只是发送键它:

role_name = driver.find_element_by_css_selector('input[ng-model="selectedRole.roleName"]') 
role_name.send_keys("test") 
+0

我试过之前的方法,并得到以下错误:消息:元素不可见(会话信息:chrome = 51.0.2704.103)(驱动程序信息:chromedriver = 2.21.371459(36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),平台= Windows NT 6.1 SP1 x86_64)和我也尝试使用execute_script:self.driver.execute_script('arguments [0] .setAttribute(“value”,“alvin”);',roleInput),仍然没有幸运 – Alvin

+0

@Alvin我不知道这个输入是否有意隐藏,或者这只是一个时间问题? – alecxe

+0

我为输入添加一个图像链接。是因为输入控件是由angularjs风格实现的吗? – Alvin

0

我认为你需要使用WebDriverWait直到元素send_keys之前等待是可见的,如下:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.support.ui import WebDriverWait 

wait = WebDriverWait(driver, 20) 
role_name = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,'input[ng-model="selectedRole.roleName"]'))) 

#now go for set value 
role_name.send_keys("alvin") 

如果您仍然无法设定价值尝试使用execute_script如下:

driver.execute_script("arguments[0].value = 'alvin'", role_name) 

希望它有帮助... :)

+0

谢谢@Saurabh!我试过你的方法,仍然没有幸运,我想知道如果硒完全支持angularjs应用程序? – Alvin

+0

你是什么意思,仍然没有幸运?有什么异常吗?请分享 –

+0

我收到了一个“TimeoutException”错误消息 – Alvin

0

您可以使用下面的代码来访问和设置值。

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver.find_element_by_xpath("//input[@ng-model = 'selectedRole.roleName']") 
WebDriverWait(browser, 60).until(EC.presence_of_element_located((By.XPATH, "//input[@ng-model = 'selectedRole.roleName']"))).send_keys('Your Value')