【问题标题】:Selenium-Java : Unable to click on an a date pickerSelenium-Java:无法单击日期选择器
【发布时间】:2017-09-22 11:54:44
【问题描述】:

我正在尝试单击日期选择器文本框,以便弹出一个日历,我可以在其中选择日期。

我能够识别元素,因为它具有易于访问的“id”属性。

手动单击文本框,会显示日历弹出窗口。

但是,我无法使用原生 Selenium 点击命令/Javascript/Jquery 点击来点击日期选择器。

以下是 HTML 代码:

<input class="ng-touched ng-dirty ng-valid" formcontrolname="effectiveDate" id="date_start" name="date_start" placeholder="dd/mm/yyyy" readonly="" type="text" ng-reflect-name="effectiveDate" autocomplete="off" value="22/09/2017" ng-reflect-model="22/09/2017">

为什么会有这种行为?在什么情况下我们可以预期 Selenium 原生命令/JS/Jquery 命令会失败?

【问题讨论】:

  • 显示你的代码你尝试了什么。
  • 我试过driver.findElementById('date_start').click();js.executeScript("document.getElementById('date_start).click()
  • 能给个网址吗?

标签: angularjs selenium selenium-webdriver webdriver


【解决方案1】:

使用JavascriptExecutor可以输入日期..

 ((JavascriptExecutor) wd).executeScript(
                    "document.getElementsByClassName('ng-touched ng-dirty ng-valid')[0].setAttribute('value', '2017-10-21')");

【讨论】:

  • 感谢您的回复。此解决方案确实使用我们需要的输入设置文本框值。但是,当您在日期选择器上单击鼠标时会发生一些后端调用,根据这些调用将显示表单中的其他字段。因此,此解决方案不会引入隐藏字段。
【解决方案2】:

根据代码,这是用 angularjs 编写的,因此 selenium 驱动程序无法定位此类元素。尝试使用 cssSelector 这是定位基于角度的元素的最佳方法,您可以使用 By.cssSelector("input [id= date_start]")。不要忘记在定位元素之前使用适当的等待。

【讨论】:

  • 感谢您的回复。我也尝试使用 JS 来识别元素。元素识别在 Selenium WD、JS 命令中运行良好。但是,单击操作不起作用。我也尝试过添加适当的等待语句。
【解决方案3】:

您可以尝试以下任何一种方法:

#1

WebElement datePicker = driver.findElement(By.id("date_start"));

WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.visibilityOf(datePicker));
wait.until(ExpectedConditions.elementToBeClickable(datePicker));
datePicker.click();

#2

Actions act = new Actions(driver);
act.moveToElement(datePicker).click().build().perform();

#3

JavascriptExecutor js= (JavascriptExecutor ) driver;
js.executeScript("arguments[0].click‌​();",datePicker);

【讨论】:

  • 方法一和方法三我都试过了,还是不行。我确实尝试过使用 act.moveToElement(datePicker).click().build().perform(); 的方法#2。和moveTopElement(datePicker)有什么区别?
  • 抱歉不是moveTopElementmoveToElement
  • 当您尝试这些方法时,您会得到什么结果?
  • 我在尝试这些方法时没有遇到任何异常。只是它跳到下一个命令。这意味着该命令正在正确执行而没有错误。但是,应用程序中没有发生单击操作。
  • 可以分享网址吗?
【解决方案4】:

我认为您将不得不获取文本框的坐标以及文本框的宽度和高度,并尝试单击文本框中日历符号的中心...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    相关资源
    最近更新 更多