无法 select Internet Explorer 中动态 webtable 下拉列表中的值
Unable to select a value from dropdown inside dynamic webtable in Internet Explorer
我正在尝试单击位于动态网络表格内的网页中的下拉菜单。
我尝试使用 driver.findelement、actions.movetoElement、javascript 机器人按键定位并 select 一个选项,但没有成功。
public void selectFromDropDown(String value) throws Exception
{
List<WebElement> elem = driver.findElements(By.xpath("//tbody[@id='tbodyAlternateIds']//select"));
for(int i=1;i<elem.size()-1;i++) {
System.out.println("Element Size>>>>>>>>" + elem.size());
WebElement Identifiers = driver.findElement(By.xpath("//select[@id='alternateIds["+i+"].type.description']"));
Select select = new Select(Identifiers);
if(select.getFirstSelectedOption().getText().isEmpty()) {
if(!(select.getFirstSelectedOption().getAttribute("value").equalsIgnoreCase(value))){
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('alternateIds["+i+"].type.description').value = "+value+";");
}
}
}
}
我的 DOM 如下所示
<SELECT id=alternateIds[2].type.description class=smalltext name=alternateIds[2].type.code value="">
<OPTION selected></OPTION>
<OPTION value=AML>AML</OPTION>
<OPTION value=ALC>Alacra ID</OPTION>
<OPTION value=BOS>BOSS</OPTION>
<OPTION value=BKA>Bankers Almanac ID</OPTION>
`
`
`
`
</SELECT>
日志报错信息如下:
org.openqa.selenium.JavascriptException: JavaScript error (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
Build info: version: '3.5.3', revision: 'a88d25fe6b', time: '2017-08-29T12:42:44.417Z'
System info: host: 'VKRDAP0009714', ip: '30.206.79.17', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_202'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities [{browserAttachTimeout=0, enablePersistentHover=false, ie.forceCreateProcessApi=false, pageLoadStrategy=normal, unhandledPromptBehavior=dismiss, ie.usePerProcessProxy=false, ignoreZoomSetting=false, handlesAlerts=true, version=11, platform=WINDOWS, nativeEvents=true, ie.ensureCleanSession=false, elementScrollBehavior=0, ie.browserCommandLineSwitches=, requireWindowFocus=true, browserName=internet explorer, initialBrowserUrl=http://localhost:45547/, takesScreenshot=true, javascriptEnabled=true, ignoreProtectedModeSettings=false, platformName=WINDOWS, enableElementCacheCleanup=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=dismiss}]
Session ID: f0f347a8-b5c6-4bf1-bd89-576498a53872
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:215)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
at org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40)
at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:82)
at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:45)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:646)
at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:582)
at com.bofa.ivv.application.driver.tandem.cucumber.step_definitions.CreateParty.selectFromDropDown(CreateParty.java:434)
select 中的 ID 是动态的。我可以单击“新建”按钮并继续处理下拉框列表。因此每个下拉框 ID 都按 [1]、[2] 等进行分类和递增... (alternateIds[1].type.description)
您需要用引号将 value
括起来,例如:
js.executeScript("document.getElementById('alternateids[" + i + "].type.description').value='" + value + "'");
- 你为什么要参加这个 JavaScript 电话会议? Select.selectByValue() 函数具有相同的功能
- 考虑迁移您的测试以使用 Page Object Model design pattern
我正在尝试单击位于动态网络表格内的网页中的下拉菜单。
我尝试使用 driver.findelement、actions.movetoElement、javascript 机器人按键定位并 select 一个选项,但没有成功。
public void selectFromDropDown(String value) throws Exception
{
List<WebElement> elem = driver.findElements(By.xpath("//tbody[@id='tbodyAlternateIds']//select"));
for(int i=1;i<elem.size()-1;i++) {
System.out.println("Element Size>>>>>>>>" + elem.size());
WebElement Identifiers = driver.findElement(By.xpath("//select[@id='alternateIds["+i+"].type.description']"));
Select select = new Select(Identifiers);
if(select.getFirstSelectedOption().getText().isEmpty()) {
if(!(select.getFirstSelectedOption().getAttribute("value").equalsIgnoreCase(value))){
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('alternateIds["+i+"].type.description').value = "+value+";");
}
}
}
}
我的 DOM 如下所示
<SELECT id=alternateIds[2].type.description class=smalltext name=alternateIds[2].type.code value="">
<OPTION selected></OPTION>
<OPTION value=AML>AML</OPTION>
<OPTION value=ALC>Alacra ID</OPTION>
<OPTION value=BOS>BOSS</OPTION>
<OPTION value=BKA>Bankers Almanac ID</OPTION>
`
`
`
`
</SELECT>
日志报错信息如下:
org.openqa.selenium.JavascriptException: JavaScript error (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
Build info: version: '3.5.3', revision: 'a88d25fe6b', time: '2017-08-29T12:42:44.417Z'
System info: host: 'VKRDAP0009714', ip: '30.206.79.17', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_202'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities [{browserAttachTimeout=0, enablePersistentHover=false, ie.forceCreateProcessApi=false, pageLoadStrategy=normal, unhandledPromptBehavior=dismiss, ie.usePerProcessProxy=false, ignoreZoomSetting=false, handlesAlerts=true, version=11, platform=WINDOWS, nativeEvents=true, ie.ensureCleanSession=false, elementScrollBehavior=0, ie.browserCommandLineSwitches=, requireWindowFocus=true, browserName=internet explorer, initialBrowserUrl=http://localhost:45547/, takesScreenshot=true, javascriptEnabled=true, ignoreProtectedModeSettings=false, platformName=WINDOWS, enableElementCacheCleanup=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=dismiss}]
Session ID: f0f347a8-b5c6-4bf1-bd89-576498a53872
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:215)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
at org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40)
at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:82)
at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:45)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:646)
at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:582)
at com.bofa.ivv.application.driver.tandem.cucumber.step_definitions.CreateParty.selectFromDropDown(CreateParty.java:434)
select 中的 ID 是动态的。我可以单击“新建”按钮并继续处理下拉框列表。因此每个下拉框 ID 都按 [1]、[2] 等进行分类和递增... (alternateIds[1].type.description)
您需要用引号将
value
括起来,例如:js.executeScript("document.getElementById('alternateids[" + i + "].type.description').value='" + value + "'");
- 你为什么要参加这个 JavaScript 电话会议? Select.selectByValue() 函数具有相同的功能
- 考虑迁移您的测试以使用 Page Object Model design pattern