Java 无法在Safari 13.0.4中单击使用Selenium的元素
诸如Java 无法在Safari 13.0.4中单击使用Selenium的元素,java,selenium,xpath,css-selectors,webdriverwait,Java,Selenium,Xpath,Css Selectors,Webdriverwait,诸如org.openqa.selenium.WebElement.click()或org.openqa.selenium.interactions.Actions.click()等方法在运行时不会触发任何错误,但也不会发生单击操作。尝试使用Javascript,但我尝试单击的元素似乎不可单击(在Chrome的开发者工具中返回未定义) 下面是元素的html <div class="flatpickr-calendar animate showTimeInput arrowTop open"
org.openqa.selenium.WebElement.click()
或org.openqa.selenium.interactions.Actions.click()
等方法在运行时不会触发任何错误,但也不会发生单击操作。尝试使用Javascript,但我尝试单击的元素似乎不可单击(在Chrome的开发者工具中返回未定义)
下面是元素的html
<div class="flatpickr-calendar animate showTimeInput arrowTop open" tabindex="-1" style="width: 245px; top: 719px; left: 1603.17px; right: auto;">
<div class="flatpickr-months">...</div>
<div class="flatpickr-innerContainer">
<div class="flatpickr-rContainer">
<div class="flatpickr-weekdays">...</div>
<div class="flatpickr-days" tabindex="-1" style="width: 245px;">
<div class="dayContainer">
<span class="flatpickr-day " aria-label="December 29, 2019" tabindex="-1">29</span>
</div>
</div>
</div>
</div>
</div>
...
...
29
要单击元素,您必须为元素导入WebDriverWait以使其可伸缩()
,并且您可以使用以下任一选项:
:css选择器
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.dayContainer>span.flatpickr-day[aria-label='December 29, 2019']"))).click();
:xpath
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='dayContainer']/span[@class='flatpickr-day ' and text()='29']"))).click();
executeScript(“参数[0]。单击();”,元素);
在这种情况下不起作用。
我必须用一些javascript代码创建一个字符串,看起来像这样
String javaScript = “let elem = arguments[0];” + “function triggerEvent(el, event){”
+ “var clickEvent = new MouseEvent(event,{view:window, bubbles:true, cancelable:true, clientX:20});”
+ “console.log(el.dispatchEvent(clickEvent));” + “el.style.background=‘red’;}”
+ “console.log(triggerEvent(elem, ‘mousedown’));“;
另一种方法是使用
JavascriptExecutor
单击。它应该work@nik实际上我试过了,但我猜javascript不能点击元素问题是,如果元素不可点击(找不到,被其他元素阻止,等等),那么肯定会出现异常.但即使使用WebDriverWait测试,也不会运行任何异常,并且不会使用标准的单击方法执行任何单击操作