如何通过Selenium的模式框中的HTML单击元素?

时间:2018-09-18 06:26:53

标签: java selenium xpath css-selectors webdriverwait

我正在自动化一些我要注销的网站。我在这段代码中遇到了困难:

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"}

3 个答案:

答案 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();