2016-07-30 95 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')