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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

selenium-05-常见问题

發(fā)布時(shí)間:2023/12/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 selenium-05-常见问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一:日期控件

selenium不能直接對(duì)日期控件操作,可以通過(guò)js對(duì)日期控件做賦值操作

?

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

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

Stringtime =?"2015/10/10";

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

? ? ? ? ? ? ? ? ? ? ? ?//通過(guò)JS給日期控件賦值

?

此方法比較簡(jiǎn)便,但因?yàn)槭墙o日期控件直接賦值,無(wú)法驗(yàn)證日期控件是否正常

?

二:上傳控件

?

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

?

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

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

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

????????????????????// 定義了一個(gè)本地文件的路徑?

adFileUpload.sendKeys(filePath);

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

?

當(dāng)上傳控件是flash時(shí),分享兩個(gè)解決方案:

?

1、借助Autolt工具,識(shí)別上傳控件

?

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

這個(gè)鏈接是testfan樓大管家分享的公開(kāi)課的視頻地址,可以現(xiàn)在觀看,記得選擇高清720p的模式學(xué)習(xí)哦~

?

2、模擬鍵盤(pán)操作

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

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

?

public static void setClipboardData(String string) {

? ?StringSelection stringSelection = new StringSelection(string);

? ?Toolkit.getDefaultToolkit().getSystemClipboard()

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

?} ? ? ? ?

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

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

?

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

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

setClipboardData(filePath); ?

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

//下面通過(guò)robot模擬粘貼快捷鍵

?Robot robot = null;

? ? try {

? ? ? robot = new Robot();

? ? } catch (AWTException e1) {

? ? ? e1.printStackTrace();

? ? } ? ? ? ? ? ? ? ?

? ? ? ? ? ????????? ? //robot模擬鍵盤(pán)操作,模擬鍵盤(pán)操作有其它方法,類似

?

robot.keyPress(KeyEvent.VK_CONTROL);

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

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

? ? robot.keyRelease(KeyEvent.VK_V);

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

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

?

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

????????????????????????//回車事件,相當(dāng)于點(diǎn)擊打開(kāi)

?

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

三:頁(yè)面隱藏元素

針對(duì)頁(yè)面隱藏元素的”display: none” 的情況,selenium沒(méi)法直接操作元素,需要通過(guò)js將元素的none值改為'block':

?

JavascriptExecutor js=(JavascriptExecutor)driver;

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

?

四:彈出窗口的處理

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需要替換成目標(biāo)窗口的title屬性的實(shí)際值,上面這段代碼最好定義成一個(gè)公共方法封裝起來(lái)~

?

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

?

五:富文本框編輯器

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

JavascriptExecutor js = (JavascriptExecutor) driver; ??

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

????????????????????// 通過(guò) js對(duì)富文本框賦值?

六:鼠標(biāo)雙擊事件

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

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

?

很多人在模擬雙擊事件是不成功,是因?yàn)闆](méi)有在后面追加perform()

?

同理,模擬鼠標(biāo)懸浮的操作

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

六:元素高亮

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

?

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);

} ? ? ? ? ? ? ? ? ? ? ? ? ?//封裝一個(gè)方法

?

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

?

文章轉(zhuǎn)載自:http://ask.testfan.cn/article/26

轉(zhuǎn)載于:https://www.cnblogs.com/i16i1007/p/6624161.html

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。