【问题标题】:WebDriver able to locate and perform action on xpath but still "NoSuchElementException" is thrownWebDriver 能够在 xpath 上定位并执行操作,但仍然抛出“NoSuchElementException”
【发布时间】:2018-03-23 06:20:12
【问题描述】:

以下是使用 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)

【问题讨论】:

    标签: selenium xpath selenium-webdriver webdriver nosuchelementexception


    【解决方案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()='Log Out'] 不是有效的 id,而是潜在的 xpath

    解决方案

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

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

    【讨论】:

    • 我使用了您的上述解决方案,但我最终还是遇到了同样的情况。我也在以类似的方式与其他 xpath 执行相同的单击操作,在所有其他情况下它工作正常。只有这个特定的 xpath 异常才会被抛出。我想问题是别的。仍然感谢您的尝试。
    【解决方案2】:

    添加到@DebanjanB 的答案:

    你也可以试试这个作为元素定位器-

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

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

    【讨论】:

    • 嗨,SK,我以前已经试过了。我还是再试了一次,我得到了同样的例外。
    • 如果您能向我们展示页面的 HTML 代码(用于注销的页面的至少一部分),我可以为您提供更好的帮助。
    • 登出 这是我能分享的最大内容。我不允许分享更多内容。
    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多