当我执行以下代码时:
driver.findElement(By.className("qview-product-name")).click();
我收到以下错误
Session ID: d5df6f837164b1738991e8dc09027fe0
*** Element info: {Using=class name, value=qview-product-name}
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByClassName(RemoteWebDriver.java:412)
at org.openqa.selenium.By$ByClassName.findElement(By.java:389)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315)
at Logins.bcLogin(Logins.java:140)
at Exception.main(Exception.java:54)
我正在处理的网页肯定包含以下HTML代码,我已经尝试等待适当的时间来执行。
<dd class="qview-product-name">
<span class="note">1 x </span>
<a href="Link_here"_blank">Title</a>
</dd>
我以为我非常擅长使用各种方法定位元素,但这让我感到困惑。关于我应该如何进行故障排除的任何想法?谢谢!
您需要注意以下几点:
By.className("qview-product-name")
是指父<dd>
标签,可能不是您要单击的所需元素。相反,您的用例必须是单击<a href="Link_here"_blank">Title</a>
元素。根据最佳实践,在调用
click()
时,您需要诱导WebDriverWaitelementToBeClickable()
,您可以使用以下任一定位器策略:linkText
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("Title"))).click();
cssSelector
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("dd.qview-product-name a[href='Link_here']"))).click();
xpath
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//dd[@class='qview-product-name']//a[@href='Link_here' and text()='Title']"))).click();
其他注意事项
确保:
- JDK已升级到当前级别 JDK 8u222。
- 硒已升级到当前级别 版本 3.141.59。
- ChromeDriver已更新到当前的 ChromeDriver v77.0 级别。 Chrome
- 已更新到当前的Chrome 版本 77.0级别。(根据ChromeDriver v77.0发行说明(
- 通过IDE清理项目工作中心,并仅使用所需的依赖项重新生成项目。
- 如果基本 Web 客户端版本太旧,请将其卸载并安装最新的 GA 和已发布版本的Web 客户端。
- 重新启动系统。
- 以非 root用户身份执行
@Test
。