我正在尝试使用Selenium将sendKeys输入到FireFox浏览器中的日历日期元素。元素显示但我一直在异常之下:
Caused by: **org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with**
Build info: version: '2.47.1', revision: '411b314', time: '2015-07-30 02:56:46'
System info: host: 'abcde-693bdc76f', ip: '192.168.1.4', os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1', java.version: '1.8.0_60'
Driver info: driver.version: unknown
定位器唯一标识元素;当我执行findElements时,列表中只有一个元素。
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("input[id='depart_date']")));
WebElement startDate = (WebElement) driver.findElement(By.cssSelector("input[id='depart_date']"));
startDate.isDisplayed();
startDate.sendKeys(Keys.DELETE);
startDate.sendKeys("20/09/2015");
以下是元素的HTML代码:
<div id="travel_dates-start-wrapper" class="r9-datepicker-wrapper r9- datepicker-twofields r9-datepicker-start-empty">
<span class="r9-datepicker-icon r9-icon-calendar-depart"></span>
<span id="travel_dates-start" class="r9-datepicker-section r9-datepicker-start">
<span id="travel_dates-start-display" class="r9-datepicker-display" contenteditable="true" tabindex="0" aria-label="Start Date"></span>
<span id="travel_dates-start-placeholder" class="r9-datepicker-placeholder">Depart</span>
</span>
<span id="travel_dates-start-clear" class="r9-datepicker-clear"></span>
<input id="travel_dates-start-tab" class="r9-datepicker-tab" type="text" readonly="true">
<input id="depart_date" class="r9-datepicker-input r9-datepicker-start" type="text" value="" name="depart_date">
</div>
这是我在StackOverflow上的第一篇文章,很抱歉,如果我的帖子有任何问题。我在同一个例外发现了很多问题。尝试了一切,但似乎没有任何工作,我坚持似乎是一个简单的问题。请帮忙。
修改:在@ spcial的建议下,从span
更改为input
。
仍然无效。
答案 0 :(得分:0)
您为什么要尝试将密钥发送到不是span
字段的HTML input
元素?我不知道HTML代码在行动中的样子,但我会尝试将密钥发送到相关的depart_date
input
元素,例如:
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("input[id='depart_date']")));
WebElement startDate = driver.findElement(By.cssSelector("input[id='depart_date']"));
答案 1 :(得分:0)
检查时
startDate.isDisplayed();
的答案是真还是假(元素是否可见)?如果不清楚,你就无法与之互动。
然而,在我看来,Selenium报告了一个不可见的元素,但是因为isDiplayed()
方法中存在错误。在这种情况下,请尝试另一个版本的浏览器(较旧或较新)和另一个版本的驱动程序(较旧或较新)
答案 2 :(得分:0)
好的......现在就做我已经拥有的实际网站了。这段代码正在运行。它设置起始机场和终点机场以及航班的起止日期。
注意:除个人使用外,您不得刮取KAYAK网站。查看他们的terms of use
此外,您同意不事先做以下任何事情 表达KAYAK的书面许可:
(i)使用任何手动或自动过程访问Good Stuff 除您个人使用或包含KAYAK页面之外的其他目的 在搜索索引中;
driver.get("http://www.kayak.com/flights");
WebElement originFlight = driver.findElement(By.id("origin"));
originFlight.clear(); // clear the default airport
originFlight.sendKeys("JFK");
driver.findElement(By.id("destination")).sendKeys("LAX");
driver.findElement(By.id("travel_dates-start")).click();
WebElement startDate = driver.findElement(By.id("travel_dates-start-display"));
startDate.clear(); // clear the default start date
startDate.sendKeys("12/1/2015");
driver.findElement(By.id("travel_dates-end")).click();
WebElement endDate = driver.findElement(By.id("travel_dates-end-display"));
endDate.clear(); // clear the default end date
endDate.sendKeys("12/15/2015");
问题是您必须单击开始/结束日期控件才能显示元素,以便输入日期。