提问人:user218649 提问时间:12/24/2019 最后编辑:undetected Seleniumuser218649 更新时间:1/16/2020 访问量:741
无法在 Safari 13.0.4 中使用 Selenium 单击元素
Unable to click on element using Selenium in Safari 13.0.4
问:
这样的方法在运行时不会触发任何错误,但也不会发生单击的操作。尝试使用 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>
答:
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’));“;
评论
JavascriptExecutor