4 回答
TA贡献1799条经验 获得超8个赞
这个错误信息...
Thu Sep 12 16:56:45 IDT 2019:ERROR: no such element: Unable to locate element: {"method":"id","selector":"menu-supply-approval-queue"}
(Session info: chrome=76.0.3809.132)
(Driver info: chromedriver=2.36.540470 (e522d04694c7ebea4ba8821272dbef4f9b818c91),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: '', ip: '', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_65'
Driver info: org.openqa.selenium.chrome.ChromeDriver
..意味着ChromeDriver无法启动/生成新的WebBrowser(即Chrome 浏览器会话)。
您的主要问题是您使用的二进制文件版本之间不兼容,如下所示:
您正在使用chromedriver=2.36
chromedriver=2.36的发行说明明确提到了以下内容:
支持Chrome v63-65
您正在使用chrome=76.0
ChromeDriver v76.0的发行说明明确提到了以下内容:
支持Chrome 版本 76
您的JDK 版本是1.8.0_65,这是相当古老的。
因此JDK v8u65、ChromeDriver v2.36和Chrome 浏览器 v76.0之间存在明显的不匹配
解决方案
确保这件事:
JDK已升级到当前级别JDK 8u222。
ChromeDriver已更新至当前ChromeDriver v77.0级别。
Chrome已更新至当前Chrome 版本 77.0级别。(根据ChromeDriver v77.0 发行说明)
@Test
以非 root用户身份执行。
TA贡献1836条经验 获得超3个赞
您发布的方法有一个 id 的字符串参数,但您在第二行中硬编码等待特定 ID
public static WebElement getWebElementByIdWithWait(String id)
{
WebDriverWait wait = new WebDriverWait(WebDriverMgr.getDriver(), 300000000);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("menu-supply-approval-queue")));
^ this is hardcoded
return WebDriverMgr.waitForElementToBeClickable(By.id(id));
}
您是否尝试过删除该行?
public static WebElement getWebElementByIdWithWait(String id)
{
WebDriverWait wait = new WebDriverWait(WebDriverMgr.getDriver(), 300000000);
return wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(id));
}
如果是我的话,我会使用下面的方法。它并不特定于 ID(您传入 a By,因此它可以与 ID、CSS 选择器、XPath 等一起使用),并且它会为您处理点击,因此等待是特定于可点击的。
public static void click(By locator)
{
new WebDriverWait(WebDriverMgr.getDriver(), 15).until(ExpectedConditions.elementToBeClickable(locator)).click();
}
你会这样称呼它
click(By.id("menu-supply-approval-queue"));
TA贡献1877条经验 获得超1个赞
存在预期条件 elementToBeClickable
WebDriverWait wait = new WebDriverWait(WebDriverMgr.getDriver(), 60); wait.until(ExpectedConditions.elementToBeClickable(By.id("menu-supply-approval-queue")));
我不确定 waitForElementToBeClickable 调用在哪里/做什么以及为什么它可能会失败。
添加回答
举报