【问题标题】:how do i find element <a> and click我如何找到元素 <a> 并单击
【发布时间】:2017-11-13 17:44:32
【问题描述】:

谁能帮助我如何使用量角器找到并点击它

<div class="col-md-3 col-sm-6 col-xs-8">
    <div class="nav-control pull-right">
            <li>
                <a class="btn theme-button" ng-click="loginSignUp()">Login/Signup</a>
            </li>
        </ul>
    </div>
</div>

我的尝试,但都没有成功。

$('.nav-control pull-right a').click();

var li = element(by.xpath('//ul/li/a'));
expect(li.getText()).toBe('Doge meme');


// by class name
element(by.className('btn theme-button')).click();

// by css
element(by.css('.btn')).click();
element(by.xpath('.//*[.="Login/Signup"]')).click();
element(by.xpath('//*[@id="top"]/div[4]/div/div/div[1]/div/div[1]/div[3]/div/ul/li/a')).click();

更新:

我可以使用以下代码单击标签。

  let el = element(by.cssContainingText('a', 'Login/Signup'));      
  var EC = protractor.ExpectedConditions;      
  browser.driver.wait(function () {
      browser.wait(EC.visibilityOf(el), 10000);
      browser.driver.manage().window().setSize(1280, 1024);
      el.click();
  });

但是,即使它点击了锚标签,但仍然在控制台中报错

失败:未知错误:元素 ... 在点 (1164, 27) 处不可点击。 其他元素会收到点击:... (会话信息:chrome=61.0.3163.100) (驱动程序信息:chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),平台=Windows NT 10.0.15063 x86_64)

【问题讨论】:

  • click() 应该可以工作,但也许你在这里没有使用正确的选择器:'.nav-control pull-right a'
  • 这就是我的问题'我做错了什么'。你能弄清楚吗?

标签: javascript html jasmine protractor


【解决方案1】:

有几种方法可以做到。仅供参考,您在某些课程之前缺少.。无论哪种方式,其中一些看起来可能过于模糊,即(.btn 可能适用于多个元素,但这是一个假设)

如果您将其更改为:$('.nav-control pull-right a').click(); 至此 $('.nav-control.pull-right &gt; li &gt; a').click();,您的前几次尝试可能会奏效

或者,您可以尝试以下一些应该也可以工作的方法:

let el = $('[ng-click="loginSignUp()"]');
let el = element(by.cssContainingText('a', 'Login/Signup'));
let el = $('a.btn.btn-theme');

【讨论】:

  • 谢谢。如果我只写“let el = element(by.cssContainingText('a', 'Login/Signup'))”,那么我不会在控制台中收到任何错误,并且我假设量角器能够在下一行找到元素但如果我写“el.click()”然后我得到相同的控制台错误'' NoSuchElementError: No element found using locator: by.cssContainingText("a", "Login/Signup")"。为什么?
  • 因为没有a这个类,所以锚标签的类是btn theme-button
  • 你甚至可以使用linkText。 element(by.linkText('Login/Signup')).click();
  • @Barney,仍然是同样的错误“使用定位器找不到元素:通过(链接文本,登录/注册)”......我在 Browder.get(......)之后立即执行此行线。这可能是由于 DOM 尚未完全加载,因此几乎无法通过所有方式找到链接吗?我需要等待 DOM 完全加载吗?
  • @simbada 是的,这可能是问题所在。看看使用Expected Conditions 之一。您可能想要presenceOfvisibilityOf(或两者)
【解决方案2】:

你能用javascript executor click尝试一次吗

var elm = element(by.linkText('Login/Signup'));
browser.executeScript("arguments[0].click();", elm.getWebElement());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2015-10-07
    • 2021-09-07
    • 2021-09-12
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多