【问题标题】:I would like to click on New Contact button from web page for my selenium script我想为我的硒脚本点击网页上的新联系人按钮
【发布时间】:2016-08-01 18:56:09
【问题描述】:

我想为我的 selenium 脚本单击“新联系人”按钮。我试过了:

driver.findElement(By.id("btn-group.contact_list-menu-contact_add")).click();

xpath 也是如此,但它不起作用。我怎样才能让它工作?

<div class="btn-group left">
<a id="contact_list-menu-contact_add" class="Button btn-contactadd primary SaveItem" href="javascript:">New Contact</a>
</div>

【问题讨论】:

  • 如果没有HTML 的目标按钮和异常日志,很难为您提供帮助
  • 什么不起作用?
  • 下面是代码
  • 你的 id 是contact_list-menu-contact_add 用作:-driver.findElement(By.id("contact_list-menu-contact_add")).click();
  • 感谢 saurabh,我也试过了,它给出了未找到的异常元素

标签: selenium xpath css-selectors


【解决方案1】:

您搜索的id 值不正确,请改用contact_list-menu-contact_add

driver.findElement(By.id("contact_list-menu-contact_add")).click();

或者,通过 CSS 选择器

driver.findElement(By.cssSelector(".btn-group .btn-contactadd")).click();
driver.findElement(By.cssSelector(".btn-group #contact_list-menu-contact_add")).click();
driver.findElement(By.cssSelector("#contact_list-menu-contact_add")).click();

或者,通过链接文本

driver.findElement(By.linkText("New Contact")).click();

如果目标元素在 iframe 中,则需要在搜索元素之前切换到框架的上下文。假设您的框架有contactURL id,这是如何切换到它:

driver.switchTo().frame("contactURL");

【讨论】:

  • 感谢 alecxe.. 以下异常在线程“main”org.openqa.selenium.NoSuchElementException 中出现异常:无法定位元素:{“method”:“css selector”,“selector”:” #contact_list-menu-contact_add"} 命令持续时间或超时:40.18 秒
【解决方案2】:

如果您收到评论中提到的NoSuchElementException,可能有两个原因:-

  • 可能当您要查找元素时,它不会出现在DOM 上,因此您应该实现WebDriverWait 以等待元素可见和可点击,如下所示:-

    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.id("contact_list-menu-contact_add")));
    el.click();
    
  • 这个元素可能在任何frameiframe 中。如果是,您需要在找到以下元素之前切换 frameiframe :-

    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("contactURL"));
    WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.id("contact_list-menu-contact_add")));
    el.click();
    

已编辑 :- 正如我从您提供的 HTML 中看到的,此按钮位于 &lt;div id="btn-new-group" class="btn-group-actions left" style="display: none;"&gt; 内,设置为不可见,这就是您无法找到按钮的原因。您应该先使其可见,然后尝试查找如下:-

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("contactURL"));
WebElement invisibleDiv = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("btn-new-group")));

//Now make it visible first
((JavascriptExecutor)driver).executeScript("arguments[0].style.display = 'block';", invisibleDiv);

//Now find contact button
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.id("contact_list-menu-contact_add")));
el.click();

希望对您有所帮助...:)

【讨论】:

  • 谢谢 saurabh .. 仍然我在线程“main”org.openqa.selenium.TimeoutException 中有一个错误异常:等待帧可用 40 秒后超时:帧 ID 或名称构建信息:版本:'2.53.1',修订:'a36b8b1',时间:'2016-06-30 17:32:46'
  • @SatyanarayanaPola 你找框架了吗??..可能它在框架内..尝试第二个选项..
  • ya saurabh .. 我尝试了第二个选项,方法是从页面源提供框架 ID 线程“主”org.openqa.selenium.TimeoutException 中的异常:等待元素可点击 40 秒后超时:按.id:contact_list-menu-contact_add 构建信息:版本:'2.53.1',修订:'a36b8b1',时间:'2016-06-30 17:32:46'
  • 而且我只有一个页面框架
  • Saurabh bhai 感谢您的大力支持,最后您成功了.. 一个 hting 代替了按 id 查找元素,我使用 javascript 来查找元素并且它正在工作:)
猜你喜欢
  • 2020-12-07
  • 2015-03-08
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
相关资源
最近更新 更多