无法在 Safari 13.0.4 中使用 Selenium 单击元素

Unable to click on element using Selenium in Safari 13.0.4

提问人:user218649 提问时间:12/24/2019 最后编辑:undetected Seleniumuser218649 更新时间:1/16/2020 访问量:741

问:

这样的方法在运行时不会触发任何错误,但也不会发生单击的操作。尝试使用 Javascript,但我尝试单击的元素似乎无法单击(在 Chrome 的开发人员工具中返回 undefined)org.openqa.selenium.WebElement.click()org.openqa.selenium.interactions.Actions.click()

这是元素的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>
java selenium xpath css-selectors webdriverwait

评论

0赞 Nik 12/24/2019
或者,请尝试单击 using 。它应该有效JavascriptExecutor
0赞 user218649 12/25/2019
@nik实际上我试过了,但我想 javascript 无法单击 <span> 元素

答:

0赞 undetected Selenium 12/24/2019 #1

要单击该元素,您必须诱导 WebDriverWait for ,您可以使用以下任一定位器策略elementToBeClickable()

  • cssSelector:

    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();
    

评论

0赞 user218649 12/25/2019
问题是,如果元素不可点击(找不到、被其他元素阻止等),则必须存在异常。但是,即使使用 WebDriverWait,测试也会运行,没有任何异常,并且不会使用标准单击方法执行任何单击操作
0赞 user218649 1/16/2020 #2

在这种情况下,常规将不起作用。 我不得不用一些 javascript 代码创建一个字符串,它看起来像这样executeScript(“arguments[0].click();“, element);

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’));“;