Java org.openqa.selenium.NoSuchElementException-硒测试

Java org.openqa.selenium.NoSuchElementException-硒测试,java,selenium,Java,Selenium,在Java中,我编写了一个用于测试Yahoo电影的Selenium测试。我正在雅虎网站上测试。但是我编写的代码(如下所示)抛出了一个异常(如下所示)。我是硒新手,所以请解决这个问题 代码: import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.u

在Java中,我编写了一个用于测试Yahoo电影的Selenium测试。我正在雅虎网站上测试。但是我编写的代码(如下所示)抛出了一个异常(如下所示)。我是硒新手,所以请解决这个问题

代码:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;



public class Tests {

    WebDriver driver;
    Wait<WebDriver> wait;
    boolean result;

    Tests() {
        driver = new FirefoxDriver();
        wait = new WebDriverWait(driver, 30);
        driver.get("http://www.yahoo.com/");
    }

    public static void main(String arg[]) {
        boolean result = new Tests().movies();
        System.out.println(result?"PASSED":"FAILED");
    }

    public boolean movies() {
        try {
            System.out.print("Testing Movies... ");
            driver.findElement(By.linkText("Movies")).click();
            driver.findElement(By.linkText("Finding Dory")).click();
            wait.until(new ExpectedCondition<Boolean>() {
                public Boolean apply(WebDriver webDriver) {
                    return webDriver.findElement(By.className("yvp-flash-video")) != null;
                }
            });
            return driver.findElement(By.id("Main")).getText().contains("'Finding Dory' Trailer");
        }
        catch(Exception exp) {
            exp.printStackTrace();
            return false;
        }
    }
}
Testing Movies... org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"link text","selector":"Finding Dory"}
Command duration or timeout: 5.08 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 16:57:40'
System info: host: 'Jahanzeb', ip: '10.99.14.207', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.7.0_79'
*** Element info: {Using=link text, value=Finding Dory}
Session ID: 5f14f1fa-85e4-471e-982f-27317dd766b7
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=WINDOWS, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, nativeEvents=false, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=46.0.1}]
    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.ErrorHandler.createThrowable(ErrorHandler.java:206)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByLinkText(RemoteWebDriver.java:428)
    at org.openqa.selenium.By$ByLinkText.findElement(By.java:246)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355)
    at Tests.movies(Tests.java:189)
    at Main.main(Main.java:14)
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"link text","selector":"Finding Dory"}
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 16:57:40'
System info: host: 'Jahanzeb', ip: '10.99.14.207', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.7.0_79'
Driver info: driver.version: unknown
    at <anonymous class>.FirefoxDriver.prototype.findElementInternal_(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:10770)
    at <anonymous class>.FirefoxDriver.prototype.findElement(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:10779)
    at <anonymous class>.DelayedCommand.prototype.executeInternal_/h(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
    at <anonymous class>.DelayedCommand.prototype.executeInternal_(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
    at <anonymous class>.DelayedCommand.prototype.execute/<(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)
FAILED
import org.openqa.selenium.By;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.firefox.FirefoxDriver;
导入org.openqa.selenium.support.ui.ExpectedCondition;
导入org.openqa.selenium.support.ui.Wait;
导入org.openqa.selenium.support.ui.WebDriverWait;
公开课考试{
网络驱动程序;
等等,等等;
布尔结果;
测试(){
驱动程序=新的FirefoxDriver();
等待=新的WebDriverWait(驱动程序,30);
驱动程序。获取(“http://www.yahoo.com/");
}
公共静态void main(字符串arg[]){
布尔结果=新测试().movies();
System.out.println(结果?“通过”:“失败”);
}
公共电影(){
试一试{
系统输出打印(“测试电影…”);
driver.findElement(By.linkText(“电影”))。单击();
driver.findElement(By.linkText(“Finding Dory”))。单击();
等待.直到(新的ExpectedCondition(){
公共布尔应用(WebDriver WebDriver){
返回webDriver.findElement(By.className(“yvp flash视频”)!=null;
}
});
return driver.findElement(By.id(“Main”)).getText()包含(“'Finding Dory'trail”);
}
捕获(异常扩展){
exp.printStackTrace();
返回false;
}
}
}
例外情况:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;



public class Tests {

    WebDriver driver;
    Wait<WebDriver> wait;
    boolean result;

    Tests() {
        driver = new FirefoxDriver();
        wait = new WebDriverWait(driver, 30);
        driver.get("http://www.yahoo.com/");
    }

    public static void main(String arg[]) {
        boolean result = new Tests().movies();
        System.out.println(result?"PASSED":"FAILED");
    }

    public boolean movies() {
        try {
            System.out.print("Testing Movies... ");
            driver.findElement(By.linkText("Movies")).click();
            driver.findElement(By.linkText("Finding Dory")).click();
            wait.until(new ExpectedCondition<Boolean>() {
                public Boolean apply(WebDriver webDriver) {
                    return webDriver.findElement(By.className("yvp-flash-video")) != null;
                }
            });
            return driver.findElement(By.id("Main")).getText().contains("'Finding Dory' Trailer");
        }
        catch(Exception exp) {
            exp.printStackTrace();
            return false;
        }
    }
}
Testing Movies... org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"link text","selector":"Finding Dory"}
Command duration or timeout: 5.08 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 16:57:40'
System info: host: 'Jahanzeb', ip: '10.99.14.207', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.7.0_79'
*** Element info: {Using=link text, value=Finding Dory}
Session ID: 5f14f1fa-85e4-471e-982f-27317dd766b7
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=WINDOWS, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, nativeEvents=false, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=46.0.1}]
    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.ErrorHandler.createThrowable(ErrorHandler.java:206)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByLinkText(RemoteWebDriver.java:428)
    at org.openqa.selenium.By$ByLinkText.findElement(By.java:246)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355)
    at Tests.movies(Tests.java:189)
    at Main.main(Main.java:14)
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"link text","selector":"Finding Dory"}
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 16:57:40'
System info: host: 'Jahanzeb', ip: '10.99.14.207', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.7.0_79'
Driver info: driver.version: unknown
    at <anonymous class>.FirefoxDriver.prototype.findElementInternal_(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:10770)
    at <anonymous class>.FirefoxDriver.prototype.findElement(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:10779)
    at <anonymous class>.DelayedCommand.prototype.executeInternal_/h(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
    at <anonymous class>.DelayedCommand.prototype.executeInternal_(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
    at <anonymous class>.DelayedCommand.prototype.execute/<(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)
FAILED
测试电影。。。org.openqa.selenium.NoSuchElementException:无法定位元素:{“方法”:“链接文本”,“选择器”:“查找Dory”}
命令持续时间或超时:5.08秒
有关此错误的文档,请访问:http://seleniumhq.org/exceptions/no_such_element.html
构建信息:版本:“2.53.0”,修订版:“35ae25b”,时间:“2016-03-15 16:57:40”
系统信息:主机:'Jahanzeb',ip:'10.99.14.207',os.name:'Windows 8.1',os.arch:'amd64',os.version:'6.3',java.version:'1.7.0_79'
***元素信息:{Using=linktext,value=Finding Dory}
会话ID:5f14f1fa-85e4-471e-982f-27317dd766b7
驱动程序信息:org.openqa.selenium.firefox.FirefoxDriver
功能[{platform=WINDOWS,acceptSslCerts=true,javascriptEnabled=true,cssSelectorsEnabled=true,databaseEnabled=true,browserName=firefox,handlesAlerts=true,nativeEvents=false,webStorageEnabled=true,rotatable=false,locationContextEnabled=true,applicationCacheEnabled=true,takesScreenshot=true,version=46.0.1}]
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于org.openqa.selenium.remote.ErrorHandler.CreateTrowable(ErrorHandler.java:206)
位于org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
位于org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
位于org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)
位于org.openqa.selenium.remote.RemoteWebDriver.findElementByLinkText(RemoteWebDriver.java:428)
位于org.openqa.selenium.By$ByLinkText.findElement(By.java:246)
位于org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355)
at Tests.movies(Tests.java:189)
Main.Main(Main.java:14)
原因:org.openqa.selenium.NoSuchElementException:无法定位元素:{“方法”:“链接文本”,“选择器”:“查找Dory”}
有关此错误的文档,请访问:http://seleniumhq.org/exceptions/no_such_element.html
构建信息:版本:“2.53.0”,修订版:“35ae25b”,时间:“2016-03-15 16:57:40”
系统信息:主机:'Jahanzeb',ip:'10.99.14.207',os.name:'Windows 8.1',os.arch:'amd64',os.version:'6.3',java.version:'1.7.0_79'
驱动程序信息:驱动程序。版本:未知
at.FirefoxDriver.prototype.findElementInternal_(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver配置文件/扩展/fxdriver@googlecode.com/组件/驱动程序组件(js:10770)
at.FirefoxDriver.prototype.findElement(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver配置文件/扩展/fxdriver@googlecode.com/组件/驱动程序组件(js:10779)
at.DelayedCommand.prototype.executeInternal\uh(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver配置文件/扩展/fxdriver@googlecode.com/组件/命令处理器(js:12661)
at.DelayedCommand.prototype.executeInternal_(file:///C:/Users/JAHANZ~1/AppData/Local/Temp/anonymous903980554428331931webdriver配置文件/扩展/fxdriver@googlecode.com/组件/命令处理器(js:12666)

在.DelayedCommand.prototype.execute/中,我假设您正在尝试单击此页面上名为“Finding Dory”的“链接”:

但是这不是一个链接-尝试手动单击它,根本不可能单击它。
如果你点击它,什么也不会发生,它只是不可点击。
-这只是一个简单的文本“Finding Dory”。

你可以点击一个名为“播放预告片”的链接,该链接位于文本“Finding Dory”下方

问题在于此页面上有许多同名“播放拖车”的链接,而WebDriver不知道应该单击哪个链接,如果您尝试一个简单的方法
findElement(By.linkText('Play trailer'))。click()

您需要告诉WebDriver,它应该单击位于文本“Finding Dory”下的链接。要做到这一点,你需要比simle方法更先进的定位策略。最受欢迎的两个是
driver.findElement(
   By.xpath(
     "//div[contains(.,'Finding Dory')]/following-sibling::a[contains(.,'Play trailer')]"
)).click();