【问题标题】:How to get an element from a random menu in protractor?如何从量角器的随机菜单中获取元素?
【发布时间】:2017-08-17 13:13:54
【问题描述】:

我是量角器、打字稿、javascript 的新手。所以,我不知道我到底做错了什么。

webelement 只是返回一个对象,我无法执行单击链接的操作。 我怎样才能得到链接文本?我尝试使用其他形式,如 id、css、标记名,但由于某种原因,该对象在某些时候会丢失。有人遇到这种问题吗?

//html (which is inside a frame)

<div class="menuLabel" id="menuLabel1"> </div>
<div class="submenubox" id="submenu1"> </div>


<div class="menuLabel" id="menuLabel2">
  <table>
    <tbody>
      <tr>
        <td> </td>
        <td class="menuText">
          <nobr>
            <a onmouseover="menuShow(event,'2')" href="javascript:void(null)" class="ml">Example Main Menu</a>
          </nobr>
        </td>
      </tr>
    </tbody>
  </table>
</div>

<div class="submenubox" id="submenu2">
  <table border="0" cellpadding="0" cellspacing="0">
    <tbody>
      <tr>
        <td class="anything">
          <table border="0" cellpadding="0" cellspacing="0">
            <tbody>
              <tr>
                <td>
                  <table border="0" cellpadding="0" cellspacing="0">
                    <tbody>
                      <tr> </tr>
                      <tr>
                        <td class="secNav">
                          <a onmouseover="subMenuShow(event, '2', '1')" ; hoverText='Example Sub Menu' target href="trade/new.action">...</a>
                        </td>
                      </tr>
                    </tbody>
                  </table>
                </td>
              </tr>
            </tbody>
          </table>
        </td>
      </tr>
    </tbody>
  </table>
</div>
//Page object file
export class PageObject {
public mainMenuLink: WebElement = element(By.linkText('Example Main Menu'));
public subMenuLink: WebElement = element(By.linkText('Example Sub Menu'));

async gettingMenu(): Promise<void> {

//Mouse over the Main Menu, once this actions is done, a table with submenu appears
await browser.actions().mouseMove(this.mainMenuLink);

//Clicking on the submenu link
await browser.actions().mouseMove(this.subMenuLink);
await browser.actions().click(this.subMenuLink);

    }
}

【问题讨论】:

    标签: javascript selenium typescript protractor automated-tests


    【解决方案1】:

    您缺少 .perform() 调用。来自官方docs

    使用此驱动程序创建一系列用户操作。在调用 webdriver.ActionSequence#perform 之前,该序列不会被安排执行。

    尝试:

     browser.actions().mouseMove(this.subMenuLink).click().perform();
    

    【讨论】:

    • 感谢您的回答,它真的帮助我进入另一个步骤。 :)
    • @KellyJoji 好消息!如果您认为它适合您的问题,请接受答案。 This 是为什么要接受答案的快速指南 :)
    【解决方案2】:

    您不需要用鼠标实际转到元素。

    您实际上可以访问该元素。

    此外,您可以按类获取元素(因为它具有唯一的类)。

    element(by.cssContainingText('.secNav', 'Example Main Menu')).click();
    

    element(by.css('.secNav')).click();
    

    这应该可以,如果有效,请告诉我。

    【讨论】:

    • 感谢@apple 的回答,但问题是我没有唯一的类,它是一种动态菜单(根据用户权限)。所以,我可以获得给定主菜单的子菜单“列表”,但如何只获得一个(并点击它)?
    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 2017-04-16
    • 2014-09-23
    • 1970-01-01
    • 2018-04-18
    • 2015-11-30
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多