日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

selenium-05-常见问题

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 selenium-05-常见问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:日期控件

selenium不能直接對日期控件操作,可以通過js對日期控件做賦值操作

?

WebElement inputTimeBox=driver.findElement(by.name("###"));

????????????????????????//定位日期控件

Stringtime =?"2015/10/10";

((JavascriptExecutor)driver).executeScript("arguments[0].value=arguments[1]",inputTimeBox, time); ?

? ? ? ? ? ? ? ? ? ? ? ?//通過JS給日期控件賦值

?

此方法比較簡便,但因為是給日期控件直接賦值,無法驗證日期控件是否正常

?

二:上傳控件

?

selenium無法直接操作windows窗體,上傳控件有屬性(type="file")時,可直接sendkeys處理上傳文件

?

WebElement adFileUpload = driver.findElement(By.id(" ###"));

????????????????????// 定位上傳控件?

String filePath = "C:\\test\\uploadfile \\test.jpg";

????????????????????// 定義了一個本地文件的路徑?

adFileUpload.sendKeys(filePath);

????????????????????// 為上傳控件進行賦值,將需要上傳的文件路徑賦給控件

?

當上傳控件是flash時,分享兩個解決方案:

?

1、借助Autolt工具,識別上傳控件

?

詳情可參考:https://ke.qq.com/course/140125#term_id=100157931

這個鏈接是testfan樓大管家分享的公開課的視頻地址,可以現在觀看,記得選擇高清720p的模式學習哦~

?

2、模擬鍵盤操作

思路:將上傳文件的路徑模擬鍵盤操作復制粘貼到文件名框中,然后再模擬鍵盤的回車事件,上傳文件,如下圖

第1步:將文件路徑獲取到windows剪切板(string參數)

?

public static void setClipboardData(String string) {

? ?StringSelection stringSelection = new StringSelection(string);

? ?Toolkit.getDefaultToolkit().getSystemClipboard()

? ? ? ?.setContents(stringSelection, null);

?} ? ? ? ?

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

第2步:將要上傳的文件的路徑通過windows快捷鍵ctrl+v粘貼到文件名控件中

?

String filePath = "E:\\1.txt";

?????????????????????????????????????//上傳的文件路徑

setClipboardData(filePath); ?

????????????????????????????????//將文件路徑傳到剪切板

//下面通過robot模擬粘貼快捷鍵

?Robot robot = null;

? ? try {

? ? ? robot = new Robot();

? ? } catch (AWTException e1) {

? ? ? e1.printStackTrace();

? ? } ? ? ? ? ? ? ? ?

? ? ? ? ? ????????? ? //robot模擬鍵盤操作,模擬鍵盤操作有其它方法,類似

?

robot.keyPress(KeyEvent.VK_CONTROL);

? ? robot.keyPress(KeyEvent.VK_V); ? ? ? ? ?

????????????????????????//同時按下CONTROL+V,將上傳文件路徑黏貼到文件名

? ? robot.keyRelease(KeyEvent.VK_V);

? ? robot.keyRelease(KeyEvent.VK_CONTROL); ?

????????????????????????// 釋放CONTROL+V

?

?robot.keyPress(KeyEvent.VK_ENTER); ? ? ?

????????????????????????//回車事件,相當于點擊打開

?

針對上傳,下載,彈出警告窗口等,都可借鑒以上兩種方法處理,當然方法還有很多。

三:頁面隱藏元素

針對頁面隱藏元素的”display: none” 的情況,selenium沒法直接操作元素,需要通過js將元素的none值改為'block':

?

JavascriptExecutor js=(JavascriptExecutor)driver;

?js.executeScript("document.getElementById('li').style.display='block';"); ? ???//通過js把隱藏元素顯示出來

?

四:彈出窗口的處理

for (int a = 0; a < =9; a++) { ?

? ???? Set ?windowHandles = driver.getWindowHandles();?

????????????????????????????????????????????????????//獲得所有窗口的句柄

? ???? for (String handler : windowHandles) {

? ?????????driver.switchTo().window(handler);?

? ?????????String title = driver.getTitle();?

? ?????????if (windowTitle.equals(title)) {?

? ? ????????????????a = 10; ?

? ? ????????????????break;

? ?????????}?

????? }?

?}?

?

代碼中的windowTitle需要替換成目標窗口的title屬性的實際值,上面這段代碼最好定義成一個公共方法封裝起來~

?

for (int a = 0; a < =9; a++)這個循環的作用是提高穩定性,個別瀏覽器情況下一次遍歷不到,會跳轉失敗

?

五:富文本框編輯器

driver.switchTo().frame("frame"); ? ? ???// 定位到富文本輸入框所在的 frame?

JavascriptExecutor js = (JavascriptExecutor) driver; ??

js.executeScript("document.body.innerHTML='ABCDEFG'");

????????????????????// 通過 js對富文本框賦值?

六:鼠標雙擊事件

Actions action =?new?Actions(driver);?

action.doubleClick(driver.findElement(by.id(####))).perform(); ? ? ? ??//鼠標停留在當前位置做雙擊事件

?

很多人在模擬雙擊事件是不成功,是因為沒有在后面追加perform()

?

同理,模擬鼠標懸浮的操作

action.moveToElement(driver.findElement(by.id(####))).perform();

六:元素高亮

有時候在操作元素時操作失敗,原因:1、定位錯誤 2、元素不可操作 ?如果無法確定失敗原因,可以先用元素高亮的方法判斷是否定位到該元素,在判斷失敗的原因

?

publicvoid?highlightElement(WebDriver driver,WebElement element) { ?

????? JavascriptExecutor js =(JavascriptExecutor) driver;

????? js.executeScript("element = arguments[0];"?+

???????????"original_style =element.getAttribute('style');"?+

????????????"element.setAttribute('style',original_style + \";"?+

???????????"background: yellow; border: 2px solidred;\");"?+

???????????"setTimeout(function(){element.setAttribute('style',original_style);}, 1000);", element);

} ? ? ? ? ? ? ? ? ? ? ? ? ?//封裝一個方法

?

highlightElement(driver,element) ? ? ?//調用,element是需要定位的目標元素

?

文章轉載自:http://ask.testfan.cn/article/26

轉載于:https://www.cnblogs.com/i16i1007/p/6624161.html

總結

以上是生活随笔為你收集整理的selenium-05-常见问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。