我正在自动化一些我需要注销的网站。我在这段代码中遇到了困难:
WebDriverWait wait = new WebDriverWait(d, 10);
WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("user logout")));
Category_Body.click();
d.findElement(By.id("logout_user")).click();
Thread.sleep(1000);
.HTML:
<a class="user logout" title="Sign out" data-target="#confirm_popup" data-toggle="modal"></a>
错误:
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"id","selector":"user logout"}
为此尝试以下代码:
WebDriverWait wait = new WebDriverWait(d, 10);
WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".user.logout")));
Category_Body.click();
PS:你也可以用ExpectedCondition.elementToBeClickable
来做到这一点。
希望对您有所帮助!
我认为问题出在标识符上 您已使用
WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("user logout")));
但根据您的 HTML
<a class="user logout" title="Sign out" data-target="#confirm_popup" data-toggle="modal"></a>
该链接没有名为">用户注销"的 ID 如果没有使用 id 尝试使用类By.findElementByClassName("user logout")
作为第二种解决方案,尝试使用 xpath(大部分时间都有效(
如果两个解决方案都不可用,您可以使用JavascriptExecutor(难以捕获的元素可以使用JavascriptExecutor轻松处理(
注意:主要问题是在没有此类ID时使用"用户注销"
干杯
根据您在模型框中找到要注销的所需元素,您需要诱导WebDriverWait该元素可单击,您可以使用以下任一选项:
-
cssSelector
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.user.logout[title='Sign out'][data-toggle='modal']"))).click();
-
xpath
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='user logout' and @title='Sign out'][@data-toggle='modal']"))).click();