获取ElementNotVisibleException:在MakeMyTrip.com中使用Selenium WebDriver作为日期选择器

时间:2016-02-21 11:20:52

标签: java selenium selenium-webdriver

我想点击makemytip.com中的特定日期。我写了下面的代码。一切正常。除了我无法选择日期。我可以导航到我想要的月份,但无法选择日期。感谢您的帮助。

当我运行以下程序时,我收到以下错误

线程“main”中的异常org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与

进行交互
.punchLine{
    float: left;
}

3 个答案:

答案 0 :(得分:0)

WebElement.click()不起作用,因为WebDriver因某种原因认为Web元素不可见。要验证这一点,您可以执行:

WebElement dayElement = d.findElement(By.xpath("//a[text()='" + day + "']"));
System.out.println("isDisplayed: " + dayElement.isDisplayed()); //this will always print false

要绕过可见性检查,您可以通过javascript执行点击:

WebElement dayElement = d.findElement(By.xpath("//a[text()='" + day + "']"));
JavascriptExecutor js = (JavascriptExecutor) d;
js.executeScript("arguments[0].click();", dayElement);

答案 1 :(得分:0)

我注意到你的元素与它的父元素(td)重叠,因此我们无法直接访问它。因此,让我们尝试直接访问父(td)标记。

现在有两种方式:

第一个是使用它的一些属性直接访问元素:

d.findElement(By.xpath("//td[@fare-date='2-2-2016']")).click();

第二种可能是您想要的自定义方式,传递变量。

List<WebElement> e = d.findElements(By.xpath("//td[@data-handler='selectDay']"));
for(WebElement we:e){     
 if(we.getText().equals(day)){
    we.click();
    break;
 }
}

请注意,我们可能无法直接在定位器中使用 text()函数识别父级,因为文本包含在子标记中。所以我们使用的是 getText()

这个函数的作用是将所有父单元格存储到一个列表中,并逐个检查每个单元格的内容,除非匹配所需的值。

希望有所帮助:)

答案 2 :(得分:0)

显式等待可能会有所帮助

,

来源:http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp