selenium-05-常见问题
一:日期控件
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)題。
- 上一篇: 腾讯云挂在和格式化数据盘
- 下一篇: 高阶篇:8.1)开模前评审及提交资料;