webdriver的元素定位很灵活,提供了多种定位方式:
Id
LinkText
PartialLinkText
Name
TagName
Xpath
ClassName
CssSelector
这些方法可以在org.openqa.selenium.By中找到,下面一一道来;
假如有这样的需求:登录安居客网站,搜索陆家嘴附近的二手房源,网页是这样的
这个需求涉及到一个输入框和一个提交按钮,先查看网页源码
在输入框中输入“陆家嘴”然后点击“二手房”按钮,如果能跳转到陆家嘴相关页面就完成了这个需求,我们尝试用webdriver提供的元素定位方法来解决
Id
id是唯一标识,通过id来定位是非常快速和准确的
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.WebElement; public class NewTest { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("http://anjuke.com"); //id WebElement text=driver.findElement(By.id("glb_search0")); text.sendKeys("陆家嘴"); WebElement button=driver.findElement(By.id("btnSubmit")); button.click(); if(driver.getTitle().contains("陆家嘴")) System.out.print("搜索成功,当前页面为"+driver.getTitle()); else System.out.print("搜索失败,当前页面为"+driver.getTitle()); driver.quit(); } }
Name
提交表单时可以通过name属性获取数据,较id来说并不常用,有id属性时建议优先使用id属性,上面的源码中text输入框是有name属性的,button依然用id来获取(当然,如果测试需要的话可以修改源码,没有修改源码权限的自动化测试是很难进行的)。
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.WebElement; public class NewTest { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("http://anjuke.com"); //name WebElement text=driver.findElement(By.name("kw")); text.sendKeys("陆家嘴"); WebElement button=driver.findElement(By.id("btnSubmit")); button.click(); if(driver.getTitle().contains("陆家嘴")) System.out.print("搜索成功,当前页面为"+driver.getTitle()); else System.out.print("搜索失败,当前页面为"+driver.getTitle()); driver.quit(); } }
TagName
tagname一般用来获取批量数据,如统计页面链接数,输入框数量等等,用tagname来定位单一元素有点麻烦
import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.WebElement; public class NewTest { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("http://anjuke.com"); List<WebElement> inputs=driver.findElements(By.tagName("input")); for(int index=0;index<inputs.size();index++){ if(inputs.get(index).getAttribute("id").equals("glb_search0")) inputs.get(index).sendKeys("陆家嘴"); if(inputs.get(index).getAttribute("id").equals("btnSubmit")) inputs.get(index).click(); } if(driver.getTitle().contains("陆家嘴")) System.out.print("搜索成功,当前页面为"+driver.getTitle()); else System.out.print("搜索失败,当前页面为"+driver.getTitle()); driver.quit(); } }
ClassName
当标签具有class属性时也可使用classname来定位,不过要注意class的值不是唯一的findElement方法返回匹配到的第一个元素
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.WebElement; public class NewTest { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("http://anjuke.com"); //classname WebElement text=driver.findElement(By.className("kw")); text.sendKeys("陆家嘴"); WebElement button=driver.findElement(By.className("btn")); button.click(); if(driver.getTitle().contains("陆家嘴")) System.out.print("搜索成功,当前页面为"+driver.getTitle()); else System.out.print("搜索失败,当前页面为"+driver.getTitle()); driver.quit(); } }
Xpath
xpath相关教程可以参考w3school上的教程,为了程序的统一性,平时工作中我都是使用xpath来定位元素的
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.WebElement; public class NewTest { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("http://anjuke.com"); //xpath WebElement text=driver.findElement(By.xpath("//input[@id='glb_search0']")); text.sendKeys("陆家嘴"); WebElement button=driver.findElement(By.xpath("//input[@id='btnSubmit']")); button.click(); if(driver.getTitle().contains("陆家嘴")) System.out.print("搜索成功,当前页面为"+driver.getTitle()); else System.out.print("搜索失败,当前页面为"+driver.getTitle()); driver.quit(); } }
CssSelector
CssSelector教程可以参考css3-selectors,CssSelector和xpath应该是实际工作中用的最多的定位方法了,两者没有优劣之分,看个人喜好吧。
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.WebElement; public class NewTest { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("http://anjuke.com"); //cssSelector WebElement text=driver.findElement(By.cssSelector("input[id='glb_search0']")); text.sendKeys("陆家嘴"); WebElement button=driver.findElement(By.cssSelector("input[id='btnSubmit']")); button.click(); if(driver.getTitle().contains("陆家嘴")) System.out.print("搜索成功,当前页面为"+driver.getTitle()); else System.out.print("搜索失败,当前页面为"+driver.getTitle()); driver.quit(); } }
LinkText和PartialLinkText
LinkText和PartialLinkText用来定位网页中的超链接,需要a标签中的全部或部分内容即可。例如,需要访问热门版块中的古美罗阳可以这样定位
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.WebElement; public class NewTest { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("http://anjuke.com"); //linkText WebElement a=driver.findElement(By.linkText("古美罗阳")); a.click(); //partialLinkText //WebElement a=driver.findElement(By.partialLinkText("古美")); //a.click(); if(driver.getTitle().contains("古美罗阳")) System.out.print("访问成功,当前页面为"+driver.getTitle()); else System.out.print("访问失败,当前页面为"+driver.getTitle()); driver.quit(); } }
层级定位
webdriver提供了层级定位的方式即通过父元素访问其子元素,比如,输出热门版块下的所有版块
import java.util.List;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.WebElement; public class NewTest { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("http://anjuke.com"); WebElement element=driver.findElement(By.xpath("//div[@id='content_Rd0']/dl[@class='dl0']/dd")); List<WebElement> links=element.findElements(By.tagName("a")); for(int index=0;index<links.size();index++){ System.out.println(links.get(index).getAttribute("text")); } driver.quit(); } }

Peranan HTML, CSS dan JavaScript dalam pembangunan web adalah: HTML bertanggungjawab untuk struktur kandungan, CSS bertanggungjawab untuk gaya, dan JavaScript bertanggungjawab untuk tingkah laku dinamik. 1. HTML mentakrifkan struktur laman web dan kandungan melalui tag untuk memastikan semantik. 2. CSS mengawal gaya laman web melalui pemilih dan atribut untuk menjadikannya cantik dan mudah dibaca. 3. JavaScript mengawal tingkah laku laman web melalui skrip untuk mencapai fungsi dinamik dan interaktif.

Htmlisnotaprogramminglanguage; itisamarkuplanguage.1) htmlstructuresandformatswebcontentusingtags.2) itworkswithcssforstylingandjavascriptforinteractivity, meningkatkan pembangunan semula.

HTML adalah asas struktur laman web bangunan. 1. HTML mentakrifkan struktur kandungan dan semantik, dan penggunaan, dan sebagainya. 2. Menyediakan penanda semantik, seperti, dan sebagainya, untuk meningkatkan kesan SEO. 3. Untuk merealisasikan interaksi pengguna melalui tag, perhatikan pengesahan bentuk. 4. Gunakan elemen lanjutan seperti, digabungkan dengan JavaScript untuk mencapai kesan dinamik. 5. Kesilapan biasa termasuk label yang tidak terkawal dan nilai atribut yang tidak disebutkan, dan alat pengesahan diperlukan. 6. Strategi pengoptimuman termasuk mengurangkan permintaan HTTP, memampatkan HTML, menggunakan tag semantik, dll.

HTML adalah bahasa yang digunakan untuk membina laman web, menentukan struktur laman web dan kandungan melalui tag dan atribut. 1) HTML menganjurkan struktur dokumen melalui tag, seperti,. 2) Penyemak imbas menghancurkan HTML untuk membina DOM dan menjadikan laman web. 3) Ciri -ciri baru HTML5, seperti, meningkatkan fungsi multimedia. 4) Kesilapan biasa termasuk label yang tidak terkawal dan nilai atribut yang tidak disebutkan. 5) Cadangan pengoptimuman termasuk menggunakan tag semantik dan mengurangkan saiz fail.

WebDevelopmentReliesOnhtml, CSS, andjavascript: 1) HtmlStructuresContent, 2) CSSStylesit, dan3) JavaScriptaddsInteractivity, Formingthebasisofmodernwebexperiences.

Peranan HTML adalah untuk menentukan struktur dan kandungan laman web melalui tag dan atribut. 1. HTML menganjurkan kandungan melalui tag seperti, menjadikannya mudah dibaca dan difahami. 2. Gunakan tag semantik seperti, dan lain -lain untuk meningkatkan kebolehcapaian dan SEO. 3. Mengoptimumkan kod HTML boleh meningkatkan kelajuan pemuatan laman web dan pengalaman pengguna.

Htmlisaspecifictypeofcodefocusedonstructuringwebcontent, manakala "kod" secara meluas ini

HTML, CSS dan JavaScript adalah tiga tiang pembangunan web. 1. HTML mentakrifkan struktur laman web dan menggunakan tag seperti, dan sebagainya. 2. CSS mengawal gaya laman web, menggunakan pemilih dan atribut seperti warna, saiz font, dan lain-lain.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma