我正在自动化一些我要注销的网站。我在这段代码中遇到了困难:
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"}
答案 0 :(得分:1)
为此尝试以下代码:
WebDriverWait wait = new WebDriverWait(d, 10);
WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".user.logout")));
Category_Body.click();
PS:您也可以使用ExpectedCondition.elementToBeClickable
来完成此操作。
希望对您有帮助!
答案 1 :(得分:0)
我认为问题在于标识符 您已使用
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的情况下使用“用户注销”
欢呼
答案 2 :(得分:0)
根据您的需要,在 Model Box 中找到所需元素以注销,您需要诱使 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();