1

当我试图找到

css=table#Salarytable.dataTable.3.4 

在 selenium ide 中,单元格被正确突出显示。但是当我在我的硒代码中使用这个定位器时..

String salary=driver.findElement(By.cssSelector("table#Salarytable.dataTable.3.4")).getText();

它给了我错误,因为存在非法字符串。编辑:html代码如下:

<table id="Salarytable" class="dataTable" cellspacing="0" border="0" style="border-collapse:collapse;">

堆栈跟踪是:

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at FunctionLibrary.FrameworkFunctions.runDriverIteration(FrameworkFunctions.java:1959)
    at FunctionLibrary.FrameworkFunctions.setActionScript(FrameworkFunctions.java:999)
    at AutomatedScripts.TableTesting.main(TableTesting.java:20)
Caused by: org.openqa.selenium.WebDriverException: An invalid or illegal string was specified
Command duration or timeout: 31 milliseconds
Build info: version: '2.35.0', revision: '8df0c6b', time: '2013-08-12 15:43:19'
System info: os.name: 'Windows 2003', os.arch: 'x86', os.version: '5.2', java.version: '1.6.0_35'
Session ID: 5d42a483-5544-4622-97aa-fc4ce00622eb
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, browserName=firefox, rotatable=false, locationContextEnabled=true, version=14.0.1, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, browserConnectionEnabled=true, nativeEvents=true, webStorageEnabled=true, applicationCacheEnabled=true, takesScreenshot=true}]
    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:191)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:307)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:396)
    at org.openqa.selenium.By$ByCssSelector.findElement(By.java:407)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:299)
    at FunctionLibrary.FrameworkFunctions.tbl_GetCellData(FrameworkFunctions.java:3105)
    at ReusableActions.GeneralActions.BC_TableTesting(GeneralActions.java:69)
    ... 7 more
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: An invalid or illegal string was specified
Build info: version: '2.35.0', revision: '8df0c6b', time: '2013-08-12 15:43:19'
System info: os.name: 'Windows 2003', os.arch: 'x86', os.version: '5.2', java.version: '1.6.0_35'
Driver info: driver.version: unknown
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at FunctionLibrary.FrameworkFunctions.runDriverIteration(FrameworkFunctions.java:1959)
    at FunctionLibrary.FrameworkFunctions.setActionScript(FrameworkFunctions.java:999)
    at AutomatedScripts.TableTesting.main(TableTesting.java:20)
Caused by: org.openqa.selenium.WebDriverException: An invalid or illegal string was specified
Command duration or timeout: 31 milliseconds
Build info: version: '2.35.0', revision: '8df0c6b', time: '2013-08-12 15:43:19'
System info: os.name: 'Windows 2003', os.arch: 'x86', os.version: '5.2', java.version: '1.6.0_35'
Session ID: 5d42a483-5544-4622-97aa-fc4ce00622eb
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, browserName=firefox, rotatable=false, locationContextEnabled=true, version=14.0.1, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, browserConnectionEnabled=true, nativeEvents=true, webStorageEnabled=true, applicationCacheEnabled=true, takesScreenshot=true}]
    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:191)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:307)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:396)
    at org.openqa.selenium.By$ByCssSelector.findElement(By.java:407)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:299)
    at FunctionLibrary.FrameworkFunctions.tbl_GetCellData(FrameworkFunctions.java:3105)
    at ReusableActions.GeneralActions.BC_TableTesting(GeneralActions.java:69)
    ... 7 more
Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: An invalid or illegal string was specified
Build info: version: '2.35.0', revision: '8df0c6b', time: '2013-08-12 15:43:19'
System info: os.name: 'Windows 2003', os.arch: 'x86', os.version: '5.2', java.version: '1.6.0_35'
Driver info: driver.version: unknown

我知道它是如何使用 xpath 完成的,但我想专门在 css 中完成它。我该怎么做。编辑:我现在在我的 webdriver 代码中给出了 table#Salarytable > tbody > tr:nth-of-type(3) > td:nth-of-type(4) 并且它工作正常。但是我不明白如何在 selenium ide 中工作的 locator(css=table#Salarytable.dataTable.3.4) 在 webdriver 代码中不起作用。谢谢你。

4

1 回答 1

0

阅读CSS 类命名规则

根据那个线程CSS类名不能以数字开头,它也不能只是一个数字。您指定的选择器 ( table#Salarytable.dataTable.3.4) 意味着 table 标记的 HTML 看起来像<table id="Salarytable" class="dataTable 3 4">这是不可能的,因此您会收到错误消息。此外,您提供的 HTML 中没有“3”和“4”。所以正确的选择器将是 just table#Salarytable.dataTable

此外,最好仅通过 id 定位表:

driver.findElement(By.id("Salarytable"))

编辑 我可能对命名规则有误。根据CSS Grammar(第 G3 节),数字实际上可能是一个有效的类名,但是在引用该名称时需要正确转义(参见链接文档)。不幸的是,我对 CSS 的了解不足以详细说明该主题。

于 2013-09-10T15:58:37.637 回答