java selenium元素定位年夜全。本站提示廣大學習愛好者:(java selenium元素定位年夜全)文章只能為提供參考,不一定能成為您想要的結果。以下是java selenium元素定位年夜全正文
頁面元素定位是主動化中最主要的工作, selenium Webdriver 供給了許多種元素定位的辦法。 測試人員應當闇練控制各類定位辦法。 應用最簡略,最穩固的定位辦法。
浏覽目次
主動化測試步調
在主動化測試進程中, 測試法式平日的操作頁面元素步調
1. 找到Web的頁面元素,並付與到一個存儲對象中 (WebElement)
2. 對存儲頁面元素的對象停止操作, 例如:點擊鏈接,在輸出框中輸出字符等
3. 驗證頁面上的元素能否相符預期
經由過程這三個步調, 我們可以完成一個頁面元素的操作, 找到頁面元素是很主要的一個步調。 找不到頁面元素,前面就沒法做了
Web頁面技巧的實際龐雜性, 形成年夜量的頁面元素很難定位。 常常有人不曉得怎樣定位。
定位辦法年夜全
應用WebDriver對象的findElement函數界說一個Web頁面元素
應用findElements函數可以定位頁面的多個元素
定位的頁面元素須要應用WebElement對象來存儲,以便後續應用
經常使用的定位頁面元素辦法以下, 按推舉排序
定位辦法
Java說話完成實例
id 定位
driver.findElement(By.id(“id的值”));
name定位
driver.findElement(By.name(“name的值”));
鏈接的全體文字定位
driver.findElement(By.linkText(“鏈接的全體文字”));
鏈接的部門文字定位
driver.findElement(By.partialLinkText(“鏈接的部門文字”));
css 方法定位
driver.findElement(By.cssSelector(“css表達式”));
xpath 方法定位
driver.findElement(By.xpath(“xpath表達式”));
Class 稱號定位
driver.findElement(By.className(“class屬性”));
TagName 標簽稱號定位
driver.findElement(By.tagName(“標簽稱號”));
Jquery方法
Js.executeScript(“return jQuery.find(“jquery表達式”)”)
若何定位
在應用selenium webdriver停止元素定位時,平日應用findElement或findElements辦法聯合By類前往元素句柄來定位元素
findElement() 辦法前往一個元素, 假如沒有找到,會拋出一個異常 NoElementFindException()
findElements()辦法前往多個元素, 假如沒有找到,會前往空數組, 不會拋出異常
若何選擇 定位辦法
戰略是, 選擇簡略,穩固的定位辦法。
1. 當頁面元素有id屬性的時刻, 盡可能應用id來定位。 沒有的話,再選擇其他定位辦法
2. cssSelector 履行速度快, 推舉應用
3. 定位超鏈接的時刻,可以斟酌linkText或partialLinkText: 然則要留意的是 , 文本常常產生轉變, 所以不推舉用
4. xpath 功效最強悍。 其時履行速度慢,由於須要查找全部DOM, 所以盡可能罕用。 其實沒有方法的時刻,才應用xpath
經由過程ID查找元素: By.id()
經由過程頁面元素的ID來查找元素是最為推舉的方法, W3C尺度推舉開辟人員為每個頁面元素都供給舉世無雙的ID屬性
一旦元素被付與了獨一的ID屬性., 我們做主動化測試的時刻,很輕易定位到元素. 元素的ID被作為首選的辨認屬性, 由於是最快的辨認戰略.
以百度主頁為例, 搜刮框的HTML示例代碼以下, 它的ID為kw
<input type="text" autocomplete="off" maxlength="100" id="kw" name="wd" class="s_ipt">
"百度一下"搜刮按鈕元素的HTML示例代碼以下, 它ID為su
<input type="submit" class="btn self-btn bg s_btn" id="su" value="百度一下">
在Selenium/WebDriver 中經由過程ID查找元素的Java示例代碼以下
WebDriver driver = new FirefoxDriver(); driver.get("http://www.百度.com"); WebElement searchBox = driver.findElement(By.id("kw")); searchBox.sendKeys("小坦克 博客園"); WebElement searchButton = driver.findElement(By.id("su")); searchButton.submit(); driver.close();
經由過程Name查找元素:By.name()
以豆瓣網的主頁搜刮框為例, 其搜刮框的HTML代碼以下, 它name是: q
<input type="text" autocomplete="off" name="q" placeholder="書本、片子、音樂、小組、小站、成員" size="12" maxlength="60">
WebDriver中經由過程name查找豆瓣主頁上的搜刮框的Java代碼以下:
WebDriver driver = new FirefoxDriver(); driver.get("http://www.douban.com"); WebElement searchBox = driver.findElement(By.name("q")); searchBox.sendKeys("小坦克"); searchBox.submit();
經由過程TagName查找元素: By.tagName()
經由過程tagName來搜刮元素的時刻,會前往多個元素. 是以須要應用findElements()
WebDriver driver = new FirefoxDriver(); driver.get("http://www.cnblogs.com"); List<WebElement> buttons = driver.findElements(By.tagName("div")); System.out.println("Button:" + buttons.size());
留意: 假如應用tagName, 要留意許多HTML元素的tagName是雷同的,
好比單選框,復選框, 文本框,暗碼框.這些元素標簽都是input. 此時單靠tagName沒法准確獲得我們想要的元素, 還須要聯合type屬性,能力過濾出我們要的元素
WebDriver driver = new FirefoxDriver(); driver.get("http://www.cnblogs.com"); List<WebElement> buttons = driver.findElements(By.tagName("input")); for (WebElement webElement : buttons) { if (webElement.getAttribute("type").equals("text")) { System.out.println("input text is :" + webElement.getText()); } }
經由過程ClassName 查找元素 By.className
以淘寶網的主頁搜刮為例, 其搜刮框的HTML代碼以下: class="search-combobox-input"
<input autocomplete="off" autofocus="true" accesskey="s" aria-label="請輸出搜刮文字" name="q" id="q" class="search-combobox-input" aria-haspopup="true" aria-combobox="list" role="combobox" x-webkit-grammar="builtin:translate" tabindex="0">
Java 示例代碼以下
WebDriver driver = new FirefoxDriver(); driver.get("http://www.taobao.com"); Thread.sleep(15000); WebElement searchBox = driver.findElement(By.className("search-combobox-input")); searchBox.sendKeys("羽絨服"); searchBox.submit();
留意:應用className 來停止元素定位時, 有時會碰著一個
經由過程LinkText查找元素 By.linkText();
直接經由過程超鏈接上的文字信息來定位元素:例如
<a href="https://passport.百度.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.百度.com%2F" name="tj_login" class="lb" onclick="return false;">登錄</a>
HTML代碼以下
WebDriver driver = new FirefoxDriver(); driver.get("http://www.百度.com"); WebElement loginLink = driver.findElement(By.linkText("登錄")); loginLink.click();
經由過程PartialLinkText 查找元素 By.partialLinkText()
此辦法是上一個辦法的增強版, 單你只想用一些症結字婚配的時刻,可使用這個辦法,經由過程部門超鏈接文字來定位元素
HTML 代碼以下
WebDriver driver = new FirefoxDriver(); driver.get("http://www.百度.com"); WebElement loginLink = driver.findElement(By.partialLinkText("登")); loginLink.click();
留意:用這類辦法定位時, 能夠會惹起的成績是, 當你的頁面中不知一個超鏈接包括“等”時, findElement辦法只會前往第一個查找到的元素,而不會前往一切相符前提的元素
假如你想要取得一切相符前提的元素,照樣只能用findElements辦法。
以上就是java selenium元素定位 的材料整頓,後續持續彌補相干材料,感謝年夜家的支撐!