qianliemao 发表于 2012-8-15 11:51:44

selenium webdriver 测试其他主机上的页面定位不到元素

selenium webdriver测试本机上的页面完全正常,但测试其他主机上的页面总是定位不到元素,求帮助
使用的InternetExplorerDriver

hanlingzhi 发表于 2012-8-16 11:39:40

其他主机页面,什么意思,你是远程调用,问题不详细{:4_94:}

qianliemao 发表于 2012-8-16 18:56:33

回复 2# hanlingzhi

比如我通过webdriver打开的是http://localhost:8080/project这样就没问题
如果是 http://192.168.1.20:8080/project 就定位不到元素. 即使192.168.1.20是我本机的地址,也不行.

WANDY 发表于 2012-8-17 13:56:05

请更详细的描述.

比如,定位不到元素,是在哪一步定位出现问题?是全局还是特定.
你指定测试其他主机,仅仅是指URL上localhost用IP替换?
最好带上截图与出错提示。方便分析。

qianliemao 发表于 2012-8-20 17:04:56

代码:
WebDriver driver = new InternetExplorerDriver();
driver.get("http://127.0.0.1:8080/sys");
System.out.println("Page title is: " + driver.getTitle());
WebElement element_usr = driver.findElement(By.name("loginName"));
element_usr.sendKeys("testuser");
WebElement element_pwd = driver.findElement(By.name("loginPwd"));
element_pwd.sendKeys("testpwd");

这样运行是正常的.
但如果把第二行换成driver.get("http://192.168.99.8:8080/sys"); 就不行. 打开登录页面然后就不动了.提示无法找到元素.
错误提示:
org.openqa.selenium.NoSuchElementException: Unable to find element with name == loginName (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 297 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.21.0', revision: '16552', time: '2012-04-11 19:09:00'
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1', java.version: '1.6.0_13'
Driver info: driver.version: RemoteWebDriver
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:175)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:128)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:459)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:227)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByName(RemoteWebDriver.java:288)
    at org.openqa.selenium.By$ByName.findElement(By.java:292)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:219)
    at com.huawei.seleniumtest.testdriver.driver.testDriver(driver.java:23)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at junit.framework.TestCase.runTest(TestCase.java:168)
    at junit.framework.TestCase.runBare(TestCase.java:134)
    at junit.framework.TestResult$1.protect(TestResult.java:110)
    at junit.framework.TestResult.runProtected(TestResult.java:128)
    at junit.framework.TestResult.run(TestResult.java:113)
    at junit.framework.TestCase.run(TestCase.java:124)
    at junit.framework.TestSuite.runTest(TestSuite.java:232)
    at junit.framework.TestSuite.run(TestSuite.java:227)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

qianliemao 发表于 2012-8-20 17:06:32

回复 4# WANDY

忘点"回复"你了,你看看上面我发的详细信息.

六月天 发表于 2012-8-22 09:16:23

可能情况有很多,两种可能性比较大,
1、localhost是本地访问,ip地址访问是属于网络访问的,你所找的页面元素可能是javascript生成的,检查下ie的安全设置,可能被阻止了。
2、做一下等待操作,可能页面做了优化处理,一些元素不是同步载入的,特别是ajax的东西,写一段等待直到元素出现来试试看

六月天 发表于 2012-8-22 09:20:43

本帖最后由 六月天 于 2012-8-22 09:23 编辑

等待的代码免费帮你写一下吧:lol把你的第4、5行改成下面这个,等待元素出现,10秒还不出现就超时
new WebDriverWait(driver, 10).until(new ExpectedCondition<WebElement>() {

                        @Override
                        public WebElement apply(WebDriver d) {
                              // TODO Auto-generated method stub
                              return d.findElement(By.name("loginName"));
                        }
                        
                }).sendKeys("testuser");

qianliemao 发表于 2012-8-23 10:17:26

回复 8# 六月天
等待还是不行.
浏览器设置看着相关的也都试过了,不行.

前台是EXTJS写的.

六月天 发表于 2012-8-24 12:31:57

回复 9# qianliemao


    你直接用浏览器用ip地址访问打开相应的网页,右键查看网页源代码,看看能不能找到这个name="loginName"的元素

qianliemao 发表于 2012-8-25 08:40:15

回复 10# 六月天
查看源文件,能找到的!

qianliemao 发表于 2012-8-26 11:50:52

回复 10# 六月天
能找到

六月天 发表于 2012-8-27 18:09:13

能手工找到那webdriver就一定能找到,应该是一些低级错误吧,仔细找找吧。
我自己试了一下,一点问题没有{:3_69:}

qianliemao 发表于 2012-8-28 08:44:59

回复 13# 六月天
找到原因了,我们是浏览器设置了代理服务器,通过代理服务器能上部分技术网站. 就是设置代理服务器造成的,在浏览器中把代理服务器去掉,就能找到.
页: [1]
查看完整版本: selenium webdriver 测试其他主机上的页面定位不到元素