2017-04-11 173 views
1

使用Selenium(Python),我們如何將By對象傳遞給findElement()?Selenium Python中的findElement(by by)方法

的Java(這工作)

By locater = By.id("username") 
WebElement elem = driver.findElement(locater) 
elem.SendKeys("tester") 

的Python(失敗)

locater = By.id("username") 
elem = driver.find_element(locater) 
elem.send_keys("tester") 

的錯誤,我在python得到的是'str' object is not callable。 我在其他SO談話看這件事和它因爲Python預計類似By.ID或By.XPATH等

我需要一種方法來傳遞通過對象,不知道這是可能的。提前致謝。

回答

3

PythonBy.XPATH不是By()類的方法,但是字符串變量:

By.XPATH == "xpath" 

嘗試下面的代碼來實現:

from selenium.webdriver.common.by import By 

locator = (By.XPATH, oSignUp.listformfieldxpaths[0]) 
elem = oDriver.getdriver().find_element(*locator) 
elem.send_keys("tester") 

注意find_element()應接受2個參數:byvalue 。兩者都是strings

+0

非常感謝@Andersson。接受這個答案最接近我想要的。你介意描述爲什麼'*'前綴定位器? –

+0

作爲'locator'的類型是'tuple',你需要使用'* locator'語法來解開元組中的值。要清楚:'find.element(locator)== find.element((By.XPATH,oSignUp.listformfieldxpaths [0]))','find.element(* locator)== find.element(By.XPATH, oSignUp.listformfieldxpaths [0])' – Andersson

+0

再次感謝@Andersson瞭解詳情和快速響應。這確實非常有用。 –

1

我相信這應該工作。給它一個鏡頭

xpath = oSignUp.listformfieldxpaths[0] 
elem = oDriver.getdriver().find_element(By.XPATH, xpath) 
elem.send_keys("tester") 
0
web_element=driver.find_element(By.ID,'id_value') 

web_element=driver.find_element('id','id_value') 

find_element有兩個參數,第一個是定位戰略,第二個是定位值。

方法簽名

 def find_element(self, by=By.ID, value=None):