我想点击makemytip.com中的特定日期。我写了下面的代码。一切正常。除了我无法选择日期。我可以导航到我想要的月份,但无法选择日期。感谢您的帮助。
当我运行以下程序时,我收到以下错误
线程“main”中的异常org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与
进行交互.punchLine{
float: left;
}
答案 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)