selenium+Java自学辛酸史

做了3年的功能测试,突然想牛逼一回,于是走上了撸码的不归路。


完全从小白开始,连Java是啥都不清楚,代码看不懂。还好友个棒棒的Android开发朋友,一路帮我辅助。


遇到的第一个问题:

调不起浏览器,于是辅助教我看错误信息,错误如下:



未设置driver路径,当前使用浏览器:火狐;selenium-sever-standalone-3.3.1

调起浏览器的语句是百度的,都是比较早的记录,最新的一些浏览器,是需要设置driver的路径


设置的语句如下:

System.setProperty("webdriver.gecko.driver","E:/selenium/geckodriver64.exe");


完整的:


    public static void setUpBeforeClass() throws Exception {
        //加载浏览器
    System.setProperty("webdriver.gecko.driver","E:/selenium/geckodriver64.exe");
        driver = new FirefoxDriver();
        navigate = driver.navigate();
        navigate.to(url);
        driver.manage().window().maximize();

}



遇到的第二个问题:

浏览器调起之后,闪现,然后浏览器崩了;

这个也百度好久,找到其中一种原因,可能是我的浏览器版本太高,于是从firefox官网下载一个稍微低一点的浏览器版本试了下,就OK了;


遇到的第三个问题:

登陆成功后的页面一直定位不到元素。页面跳转前和跳转后的URL不变

定位元素的时候,一直提示:Unable to locate element: /html/body/div/div[2]/div,如下:



org.openqa.selenium.NoSuchElementException: Unable to locate element: .closeX
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '3.3.1', revision: '5234b32', time: '2017-03-10 09:04:52 -0800'
System info: host: 'PC-201704251730', ip: '192.168.1.151', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_131'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{moz:profile=C:\Users\ADMINI~1\AppData\Local\Temp\rust_mozprofile.qkWjUwRG7dKF, rotatable=false, timeouts={implicit=0, page load=300000, script=30000}, pageLoadStrategy=normal, platform=ANY, specificationLevel=0, moz:accessibilityChecks=false, acceptInsecureCerts=false, browserVersion=52.0.2, platformVersion=6.1, moz:processID=9160, browserName=firefox, platformName=windows_nt}]
Session ID: 511b50aa-a691-4771-84c7-f4ec6aa36609
*** Element info: {Using=class name, value=closeX}
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:133)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:99)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:43)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:163)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:604)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:371)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByClassName(RemoteWebDriver.java:460)
at org.openqa.selenium.By$ByClassName.findElement(By.java:391)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)
at com.banner.test.CreatBanner.setUpBeforeClass(CreatBanner.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)




于是用classname、linktext、xpath几种方式一次定位,还是一样的提示;

后面也是层层百度,穿梭在各大博客、社区,添加了一个等待时间:

Tread.sleep(1000);

这里要说明下,等待时间问题一出现,我就想到添加等待时间,但是加的等待时间是另一种:
WebDriverWait wait = (new WebDriverWait(wd, 10));
wait.until(new ExpectedCondition<WebElement>() {
public WebElement apply(WebDriver d) {
return d.findElement(sendMessageSelector);

这种方法我没用过,也没研究过,直接copy的,所以用了之后,然并软,于是换成Thread.sleep();结果就不报错了;


然后今天遇到一个问题:

也是提示:Unable to locate element: /html/body/div/div[2]/div

后面我就查看了下页面:


发现上面有个iframe,我就想起在查上个问题的时候,看到的相关的一些文章,可能引起的问题,是页面使用了iframe,所以需要先定位到当前的iframe,大部分百度使用的是iframe的ID定位,巧的是,我这页面没有iframe,于是继续百度、谷歌、搜狗...找到相关的文章,成功解决了问题:


贴上博客原文:
http://www.cnblogs.com/sola-tester/p/4143485.html


我的代码:


于是用classname、linktext、xpath几种方式一次定位,还是一样的提示;
        Thread.sleep(1000);
        WebElement frame=driver.findElement(By.xpath( "/html/body/div/div[3]/div/div/div[2]/iframe" ));
        driver.switchTo().frame(frame);
        driver.findElement(By.xpath("/html/body/div/div[1]/div/div[1]/a[1]")).click();
        System.out.println("点击新增");



每一次的问题解决,都激起了我要放弃学习的念头,等到问题解决,就会觉得自己棒棒哒,问题其实挺简单,但是小白的我们,路漫漫其修远兮


每一次的积累,希望给遇到相同坎坷的人一丝帮助









于是用classname、linktext、xpath几种方式一次定位,还是一样的提示;
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值