Selenium給元素的屬性賦值

  • 我們在做UI自動化測試的過程中,某些情況會遇到,需要操作WebElement屬性的情況。

假設現在我們需要獲取一個元素的title屬性,我們可以先找到這個元素,然后利用get_attribute方法獲取屬性的值。
舉個栗子:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
search_button = driver.find_element_by_id("su")  # 百度搜索按鈕
# 現在我們獲取百度一下的值
value = search_button.get_attribute("value")  # 獲取input標簽的value,也就是百度一下那4個字
print(value)   # 打印  百度一下


但是現在我們有了新的需求,我們需要改變百度一下這個按鈕里邊顯示的值。

先說一下原理,原理是利用js的dom(document object model),也就是文檔對象模型,獲取到input標簽, 然后通過js來改變這個input標簽的value屬性。
js如下:

var button = document.getElementById("su");
button.setAttribute("su", "你猜一下");
//或者直接給value屬性賦值
document.getElementById("su").value = "你猜一下";

我們在Chrome DevelopmentTools里邊可以看到,“百度一下”變成了“你猜一下”~

image.png

那么為什么我們不直接用driver.execute_script()這個方法來執(zhí)行上述js語句呢,但是要知道,因為dom里獲取元素的方式有限,并不如selenium那么方便,什么link_text這類的api都是無法使用的。

昨天偶然發(fā)現2個問題,第一是execute_script函數是可以傳腳本參數進去的,第二個是selenium抓取到的元素可以作為js的dom元素處理。有了這2點之后呢,就可以干活了!


現在用WebElement的方法做到同樣的事情

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
search_button = driver.find_element_by_id("su")  # 百度搜索按鈕
# arguments[0]對應的是第一個參數,可以理解為python里的%s傳參,與之類似
driver.execute_script("arguments[0].value = '你猜一下';", search_button)



補充一點, 如果需要獲取js語句執(zhí)行后的返回值,在js語句前加"return" 就行了,例如:

button_value = driver.execute_script("return arguments[0].value;", search_button)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 14,091評論 1 92
  • 轉自Selenium WebDriver注意:本章內容官方團隊正在完善中。 介紹 WebDriver### Sel...
    抓兔子的貓閱讀 7,886評論 2 22
  • 一、JS前言 (1)認識JS 也許你已經了解HTML標記(也稱為結構),知道了CSS樣式(也稱為表示),會使用HT...
    凜0_0閱讀 2,900評論 0 8
  • 鯨魚小姐是一只化身孤島的鯨,像歌詞那樣寫有著巨大的身影,魚蝦在身側穿行,也有飛鳥在背上停。 她愛地中海的天晴,愛西...
    長卟噠閱讀 851評論 9 11
  • 學習就跟工作一樣,要是你有錢,有權力,還會去關注?如果你是天才學霸,還會去學習?誰想上學?中國的教育制度該改改了,...
    零黎閱讀 306評論 0 0

友情鏈接更多精彩內容