在Xpath中使用“AND”和“normalize-space”时在不同的浏览器中获得不同的错误

时间:2017-01-17 08:07:37

标签: java selenium xpath selenium-webdriver

我的网页中有以下简单按钮 -

<button type="button" class=" m-form-btn" onclick="myFunction()">Save</button>

因为类名有一个空格所以我正在使用normalize-space() -

driver.findElement(By.xpath("//button[@type='button'][normalize-space(@class='m-form-btn')]")).click();

哪种方法正常,但我以这种方式使用AND -

driver.findElement(By.xpath("//button[@type='button' AND normalize-space(@class='m-form-btn')]")).click();

//or

driver.findElement(By.xpath("//button[normalize-space(@class)='m-form-btn' AND @type='button']")).click();

Firefox -

中收到错误
  

线程“main”中的异常   org.openqa.selenium.remote.UnreachableBrowserException:错误   与远程浏览器通信。它可能已经死了。构建信息:   版本:'未知',修订版:'1969d75',时间:'2016-10-18 09:43:45   -0700'系统信息:主机:'TSS167',ip:'192.168.1.167',os.name:'Windows 8.1',os.arch:'amd64',os.version:'6.3',java.version:   '1.8.0_91'驱动程序信息:driver.version:RemoteWebDriver功能   [{rotating = false,raisesAccessibilityExceptions = false,   marionette = true,firefoxOptions = {args = [],prefs = {}},   appBuildId = 20161208153507,version =,platform = XP,proxy = {},   command_id = 1,specificationLevel = 0,acceptSslCerts = false,   processId = 7824,browserVersion = 50.1.0,platformVersion = 6.3,   XULappId = {ec8030f7-c20a-464f-9b0e-13a3a9e97384},browserName = firefox,   takesScreenshot = true,takeElementScreenshot = true,   platformName = windows_nt}]会话ID:   30ed9c92-2d49-4c7b-83bc-c1638e24b3e8 at   org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:622)     在   org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:368)     在   org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:473)     在org.openqa.selenium.By $ ByXPath.findElement(By.java:361)at at   org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:360)     在ClassEight.main(ClassEight.java:28)引起:   java.lang.IllegalArgumentException:期望一个元素,但是:     在   com.google.common.collect.Iterators.getOnlyElement(Iterators.java:322)     在   com.google.common.collect.Iterables.getOnlyElement(Iterables.java:284)     在   org.openqa.selenium.remote.ErrorCodes.toStatus(ErrorCodes.java:138)     在   org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:92)     在   org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:42)     在   org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:163)     在   org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)     在   org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601)     ......还有5个

并在Chrome -

中跟踪错误
  

线程“main”中的异常   org.openqa.selenium.InvalidSelectorException:无效的选择器:无法使用   使用xpath表达式定位元素   //按钮[normalize-space(@class)='m-form-b​​tn'AND @ type ='button']   由于以下错误:SyntaxError:无法执行   “评估”'文件':字符串   '// button [normalize-space(@class)='m-form-b​​tn'AND @ type ='button']'is   不是有效的XPath表达式。

我使用evaluate xpath firepath我获得了预期的输出。

我不知道导致问题的原因,我正在AND使用normalize-space是这样吗?或者我做错了什么?

使用selenium 3.0.1

1 个答案:

答案 0 :(得分:3)

OR中使用大写ANDXPath是错误的方法(至少在Selenium中)。您应该使用or / and代替。所以试试

driver.findElement(By.xpath("//button[normalize-space(@class)='m-form-btn' and @type='button']")).click();