WebDriver能够在xpath上找到并执行操作,但仍然会抛出“NoSuchElementException”

时间:2018-03-23 06:20:13

标签: selenium xpath selenium-webdriver webdriver nosuchelementexception

下面是使用xpath单击对象的简单代码。我成功地找到了xpath并执行了所需的操作,但仍然抛出了“ NoSuchElementException ”。

String localobject=OR.getProperty(object); //Obtaining xpath from object repository
we = driver.findElement(By.xpath(""+localobject+"")); 
executor.executeScript("arguments[0].click();", we);

这是跟踪

org.openqa.selenium.NoSuchElementException: Unable to find element with css selector == #\/\/\*\[text\(\)\=\'Log\ Out\'\]
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '3.9.1', revision: '63f7b50', time: '2018-02-07T22:42:22.379Z'
System info: host: 'xxxxxxxx', ip: 'xx.xx.xx.xx', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_161'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities {acceptInsecureCerts: false, browserName: internet explorer, browserVersion: 11, javascriptEnabled: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), se:ieOptions: {browserAttachTimeout: 0, elementScrollBehavior: 0, enablePersistentHover: true, ie.browserCommandLineSwitches: , ie.ensureCleanSession: false, ie.fileUploadDialogTimeout: 3000, ie.forceCreateProcessApi: false, ignoreProtectedModeSettings: false, ignoreZoomSetting: false, initialBrowserUrl: http://localhost:17221/, nativeEvents: true, requireWindowFocus: false}, setWindowRect: true, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}}
Session ID: 1617a9c2-cd03-4c77-8732-c4951fd83729
*** Element info: {Using=id, value=//*[text()='Log Out']}
    at sun.reflect.GeneratedConstructorAccessor32.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:187)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:160)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:371)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:417)
    at org.openqa.selenium.By$ById.findElement(By.java:218)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)
    at config.Keywords.click(Keywords.java:129)
    at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at executionEngine.DriverScript.execute_Actions(DriverScript.java:123)
    at executionEngine.DriverScript.execute_TestCase(DriverScript.java:106)
    at executionEngine.DriverScript.main(DriverScript.java:57)

2 个答案:

答案 0 :(得分:1)

错误说明了一切:

org.openqa.selenium.NoSuchElementException: Unable to find element with css selector == #\/\/\*\[text\(\)\=\'Log\ Out\'\]
// and
Element info: {Using=id, value=//*[text()='Log Out']}

表达#// * [text()\ = \' Log \ Out \'] 绝对不是有效的 css选择器 。目前CSS_Selectors不支持text()属性。

表达式 // * [text()='退出'] 不再是有效的id,而是潜在的 xpath

解决方案

从对象存储库获取 xpath 时,请确保将其作为String调用,如下所示:

we = driver.findElement(By.xpath(localobject));

答案 1 :(得分:0)

添加@ DebanjanB的回答:

您也可以尝试将其作为元素定位器 -

//*[contains(.,'Log Out')]

试试这个,让我知道它是否适合你。