当前位置: 首页 > 知识库问答 >
问题:

选择月份中的值下拉-Selenium WebDrive

白浩气
2023-03-14

目前正在开发SeleniumWeb驱动程序和Java。我想选择日期选择器形式的选项。我试图从日期选择器下拉列表中选择月份。但它显示以下无法定位元素:{“方法”:“类名”,“选择器”:“ui日期选择器月”}命令持续时间或超时:31毫秒

因此,我需要使用java脚本执行器使元素可见,但在下面的代码中,我写为“document.getElementById('ui-datepicker-month'),所以它再次将错误显示为“document”。getElementById(“”)为空

以下是超文本标记语言:

<div class="ui-datepicker-title">
<select class="ui-datepicker-month" onchange="DP_jQuery_1391048152193.datepicker._selectMonthYear('#fromDate', this, 'M');">
<option selected="selected" value="0">Jan</option>
<option value="1">Feb</option>
<option value="2">Mar</option>
<option value="3">Apr</option>
<option value="4">May</option>
<option value="5">Jun</option>
<option value="6">Jul</option>
<option value="7">Aug</option>
<option value="8">Sep</option>
<option value="9">Oct</option>
<option value="10">Nov</option>
<option value="11">Dec</option>
</select>

这是我尝试的形式,但它不工作:

JavascriptExecutor executor42 = (JavascriptExecutor)driver;
executor42.executeScript("document.getElementById('ui-datepicker-month').style.display='block';");
List<WebElement> select42 = new Select(driver.findElement(By.className("ui-datepicker-month"))).getOptions();
((Select) select42).selectByValue("Jun");

以下是stacktrace:

失败:登录java.lang.com.google.common.base.Preconditions.checkNotNull(Preconditions.java:192)在org.openqa.selenium.support.ui.Fluent等等。(FluentWait.java:94)在org.openqa.selenium.support.ui.WebDriver等等。(WebDriverWait.java:66)在org.openqa.selenium.support.ui.。WebDriverWait.java:40)在测试。测试时的Overview AndEovtionPr. performLogin(Overview AndEovtionPr. java: 525)。在sun.reflect.NativeMEDAccessorImpl.invoke0(本地方法)在sun.reflect.NativeMEDAccessorImpl.invoke(未知来源)在sun.reflect.委托Method.invoke(未知来源)org.testng.internal.MEDInvocationHelper.invoke方法(MEDInvocationHelper. java: 84)at org. testng. interal.调用方法(Invoker. java: 714)在org. testng. interal。(Invoker. java: 901)在org. testng. interal.(Invoker. java: 1231)在org. testng. interal.在org. testng. interal上的TestMEDWorker. invkeTest方法(TestMEDWorker. java: 127)。在org. testng运行(TestMEODWorker. java: 111)。在org. testng上运行(TestRunner. java: 767)。在org. testng运行(TestRunner. java: 617)。SuiteRunner. runTest(SuiteRunner. java: 334)at org. testng.在org. testng.在org. testng.SuiteRunner. run(SuiteRunner. java: 240)at org. testng.SuiteRunnerWorker. runSuite(SuiteRunnerWorker. java: 52)at org. testng.在org. testng运行(SuiteRunnerWorker. java: 86)。在org. testng.TestNG. runSuitesLocally(TestNG. java: 1149)at org. testng.运行(TestNG. java: 1057)在org. testng. Remote。在org. testng. Remote运行(远程测试NG. java: 111)。远程测试NG. initAndRun(远程测试NG. java: 204)在org. testng. Remote。java: 175

共有3个答案

史默
2023-03-14

最后我得到了整个日期选择器选项卡的答案。

下面是代码

Log.info("Clicking on fromDate drop down");
driver.findElement(By.id("fromDate")).click();
WebElement selectElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.className("ui-datepicker-month")));
Select select42 = new Select(selectElement);
select42.selectByValue("5");
Thread.sleep(6000);

WebElement selectElement1 = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.className("ui-datepicker-year")));
Select select43 = new Select(selectElement1);
select43.selectByValue("2012");
Thread.sleep(6000);

WebElement dateWidget=driver.find元素(By.id(ui-datepicker-div));列表列=dateWidget.find元素(By.tag名称(td));

for (WebElement cell: columns){
//Select 13th Date 
if (cell.getText().equals("13")){
cell.findElement(By.linkText("13")).click();
break;
}
} 

感谢@user1177636。。

祁通
2023-03-14

我有使用QAF的解决方案

Select select = new Select(new QAFExtendedWebElement("your locator id"))
    .selectByVisibleText("your text from drop down");
吕永寿
2023-03-14

首先,你说“不工作”是什么意思?什么都没发生?例外情况?请解释清楚。

我现在不能测试Java,但是请调试以下内容:

// Why are you doing this? Can't you just click to open?
// I suspect this is why
JavascriptExecutor executor42 = (JavascriptExecutor)driver;
executor42.executeScript("document.getElementById('ui-datepicker-month').style.display='block';");

// if your code above works, then do the following
WebElement selectElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.className("ui-datepicker-month")));

Select select42 = new Select(selectElement);
select42.selectByValue("5");
// or select42.selectByVisibleText("Jun");

如果您不想循环使用这些选项,请不要使用getOptions()和混乱的列表

请始终在此处的API文档中查找方法。

SselectByValue

选择值与参数匹配的所有选项。也就是说,当给定“foo”时,它将选择一个类似:Bar的选项

SselectByVisibleText

选择显示与参数匹配的文本的所有选项。也就是说,当给定“Bar”时,这将选择一个类似:Bar的选项

 类似资料:
  • 下面是我得到的错误。 下面是HTML DOM

  • 我正在尝试使用angular-用户界面-datepicker作为月份选择器。但是不能配置它,尝试了所有。这是PLUNKER。 我试图将模式设置为 也是:datepicker选项的一部分,使用JS作为 但这也不管用请帮帮忙

  • 有没有办法创建一个包含所有三个下拉列表(日期月份和年份)的日期选择器,我可以通过JS/前端验证将输入的最低年龄限制为18岁?

  • 主要内容:1. Java List 示例,2. OGNL List 实例在Struts2中,HTML下拉框可以通过<s:select>标签呈现。要自动选择一个下拉框的默认值,只是声明<s:select>值”属性标记,并设置相应的默认值。 这里创建一个Web工程:strut2autoselectdropdown,来演示在多个复选框如何设置的默认值,整个项目的结构如下图所示: 1. Java List 示例 Java列表生成选择选项的下拉框。 <s:select>标记呈现

  • 我有一个从数据库中提取下拉选项的工厂: 然后,我将该数据应用于控制器中的下拉列表/选择: 下面是select标记的外观: 放入$scope的下拉列表数据。临床DDL如下所示: 从 DB 返回的用户数据如下所示: 在我的控制器中,我填充了下拉列表/选择,然后我获取了一个用户ID并将其提交给DB以获取用户信息。这些用户信息会返回。然后,我想根据DB返回的“DefaultLocationId”从先前填充

  • 问题内容: 如何使用月/年从表中获取记录?我有一张这样的桌子: 是项目的截止日期,我想要对应于月份/年份的记录,而不是完整的日期,我的意思是特定月份的记录。 我该如何在mysql中做到这一点? 问题答案: 只需使用MONTH()和YEAR()即可: