css选择器,用于在selenium webdriver中选择表中的特定行和列

时间:2013-09-10 15:01:35

标签: java css selenium selenium-webdriver

当我试图找到

css=table#Salarytable.dataTable.3.4 

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

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中专门做到这一点。我该怎么做。 编辑:我已经给了表#Sularytable&gt; tbody&gt; tr:nth-​​of-type(3)&gt; td:nth-​​of-type(4)现在在我的webdriver代码中它工作正常。但是我不明白在selenium ide中工作的定位器(css​​ = table#Salarytable.dataTable.3.4)是如何在webdriver中工作的码。  谢谢。

1 个答案:

答案 0 :(得分:0)

了解CSS classes naming rules

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

最好只通过id:

找到表格
driver.findElement(By.id("Salarytable"))

修改 关于命名规则我可能错了。根据{{​​3}},数字实际上可能是有效的类名,但是在引用时需要正确转义该名称(请参阅链接文档)。遗憾的是,我对CSS的了解不足以详细阐述该主题。