java selenium使用心得

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_23888451/article/details/70161097

注意:一定要搞清楚,你的系统是win64还是32的,然后下载相应版本的selenium-server-standalone-3.3.x.jar和selenium-java-3.3.x.zip,要不然会报各种错误,你还不知道该怎么解决的。。。。 [蜜汁微笑]

下面说明一下java编程的步骤:

1.下载使用到材料

点击这里下载各种版本的jar
把相应的driverServer.exe放入浏览器的安装目录下,比如:IEDriverServer.exe放入本地磁盘C:\Program Files\Internet Explorer目录下
图1

2.eclipse中创建普通工程

  1. 创建java工程,selenium-java-3.3.x.zip解压,把lib直接拷到工程目录下,把client-combined-3.3.1-nodeps.jar拷进lib中,build path把jar包加入工程中。
  2. 创建类,编程。

3.eclipse中创建maven工程

  1. 创建maven工程,在pom.xml文件中,增加依赖,我用的3.4.0版本:
    <dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.4.0</version>
    </dependency>

4.获取driver

IE
System.setProperty( "webdriver.ie.driver" ,"C:/Program Files/Internet Explorer/IEDriverServer.exe");
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, true);
capabilities.setCapability("ignoreZoomSetting", true);
driver = new InternetExplorerDriver(capabilities);
Google
System.setProperty ( "webdriver.chrome.driver" , "C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe" );
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setBrowserName("chrome");
ChromeOptions options = new ChromeOptions();
options.addArguments("disable-infobars");
options.addArguments("--disable-extensions");
options.addArguments("no-sandbox");
//options.addArguments("headless");  //不打开浏览器
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
driver = new ChromeDriver(options);

5.定位元素

  1. By.id
    WebElement element = driver.findElement(By.id("appId"));

  2. By.name
    WebElement element = driver.findElement(By.name("app"));

  3. By.xpath
    WebElement element = driver.findElement(By.xpath("//input[@onclick='Open_tab(2)']"));

  4. By.className
    List<WebElement> elements = driver.findElements(By.className("app"));

  5. By.linkText
    例如:
    <a href="www.baidu.com">百度</a>
    WebElement element = driver.findElement(By.linkText("百度"));

  6. By.cssSelector
    根据tagName:driver.findElement(By.cssSelector("input")
    根据ID:driver.findElement(By.cssSelector("input#username"));html标签和id
    参考:cssSelector之selenium元素定位

  7. 执行javascript代码
    ((JavascriptExecutor)driver).executeScript("isOpen(2)");

6.其他

操作下拉列表

下拉列表的id为appdq:

Select select = new Select(driver.findElement(By.id("appdq")))
select.selectByVisibleText(“A”);//选择A
select.selectByValue(“1”); 
select.deselectAll();
select.deselectByValue(“1”);
select.deselectByVisibleText(“A”);
select.getAllSelectedOptions();
select.getFirstSelectedOption(); 
关闭浏览器

driver.close();//关闭当前的浏览器窗口
driver.quit();//不仅关闭了当前的浏览器窗口还彻底的退出WedDriver,释放了Driver与Server之间的链接
建议使用driver.quit()。

上传文件

WebElement element =driver.findElement(By.id(“file”));
String filePath = “C:\a.txt”;
element .sendKeys(filePath);

切换iframe,Windows

driver.switchTo().defaultContent();//返回到最顶层的frame/iframe
driver.switchTo().frame(“frame0”);//切换到某个frame:
driver.switchTo().window(“window”); //切换到某个window

Set<String> handlers=driver.getWindowHandles();//获取所有窗口
String currHandle=driver.getWindowHandle();//获取当前窗口
for(String s:handlers){
    if (!s.equals(currHandle)) {
        driver.switchTo().window(s);//切换到其他窗口
    }
}
click()点击无效,sendKeys()输入不全

可以尝试执行JavaScript代码的方式解决,
原:driver.findElement(By.id("share1")).click();
现:((JavascriptExecutor)driver).executeScript("document.getElementById('share1').click();");

原:driver.findElement(By.id("sex")).sendKeys((user.getSex()).toUpperCase());
现:String sex="document.getElementById('sex').value='"+user.getSex()+"';";
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript(sex);

获取不到某个元素

有时程序执行太快,网页还没加载完毕,这时需要在代码中让线程休息几秒钟Thread.sleep(2000);,有好多次出错都是因为执行太快了。

编程过程中注意事项

1.对异常的处理,对每个元素执行一次操作就进行异常捕获,防止抛出异常导致程序无法继续执行;
2.如果要获取页面上的数据,可以使用jsoup,或者是selenium+jsoup;
driver.get(INDEX_URL);//打开浏览器,访问网址
String pageSource = driver.getPageSource();
Document doc = Jsoup.parse(pageSource);
doc.select("#mainsrp-itemlist .item");//#对应的id,.对应class

3.httpunit

等待补充

猜你喜欢

转载自blog.csdn.net/qq_23888451/article/details/70161097